Передача словарей из модуля в модуль Python
Есть задача, передать словарь из локальной области видимости в глобальную, а после этого отправить в другой модуль.
В глобальной области видимости он задается пустым.
В одной из функций заполняется какими-то значениями и с помощью return отправляется обратно, в глоабльную область видимости.
Мне нужно эти вычисления, которые хранятся в словаре перебросить в другой модуль.
Через import я получаю пустой словарь.
Есть два модуля: test2 (клиентская часть), test (движок)
ниже пример клиента:
from test2 import checking
guess = [9, 1, 5, 7]
step_checking = checking(guess=guess)
print('быки - ', step_checking['bulls'], 'коровы - ', step_checking['cows'])
пример движка:
_holder = [1, 2, 5, 7]
def checking():
bull = 0
cow = 0
for index_value in range(1, len(guess)):
# print('Быков - ', bull, 'Коров - ', cow)
print('сравнение числа', index_value, 'из списка guess')
print(guess[index_value], 'предполагаемое число')
print(_holder[index_value], 'загаданное число')
if guess[index_value] == _holder[index_value]:
print('число совпадает по индексу и значению = нашелся БЫК')
bull += 1
elif guess[index_value] != _holder[index_value]:
if guess[index_value] in _holder:
cow += 1
print('такое же число имеется в списке = нашлась КОРОВА')
else:
print('Совпадений не найдено')
Ответы (2 шт):
я отметил и прокомментировал строки, в которые внес изменения:
main.py
from q1212449_2 import checking
guess = [9, 1, 5, 7]
step_checking = checking(guess=guess) # вызываем функцию 'checking' и передаем туда 'guess'
# ^^^^^^^^^^ <-- ^^^^^^^ # результат вычислений 'checking' будет в 'step_checking'
print('\nбыки - ', step_checking['bulls'], ', ',
'коровы - ', step_checking['cows'])
q1212449_2.py
_holder = [1, 2, 5, 7]
# vvvvv <--- принимаем 'guess' из 'main.py'
def checking(guess): # + guess
bull = 0
cow = 0
for index_value in range(1, len(guess)):
# print('Быков - ', bull, 'Коров - ', cow)
print('\nсравнение числа', index_value, 'из списка guess')
print(guess[index_value], 'предполагаемое число')
print(_holder[index_value], 'загаданное число')
if guess[index_value] == _holder[index_value]:
print('число совпадает по индексу и значению = нашелся БЫК')
bull += 1
elif guess[index_value] != _holder[index_value]:
if guess[index_value] in _holder:
cow += 1
print('такое же число имеется в списке = нашлась КОРОВА')
else:
print('Совпадений не найдено')
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +++
# после каких-то рассчетов формируем словарь '_dict'
_dict = {
'bulls': bull,
'cows': cow
}
# передаем словарь '_dict' в 'main.py'
return _dict
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +++
Выше уже приведен код, который, безусловно реализует задачу. А вообще нужно же понимать, что если уж пишите, воспользоваться return, то и пользуйтесь им. Почему его в вашем коде то нет?
Передаёте в функцию именованный параметр, а в функции он почему то не объявлен. Почему? Да и зачем он именованный там - тоже не понятно, значения по умолчанию то нет же, да и он нужен единственный так, что
step_checking = checking(guess=guess)
можно сократить до:
step_checking = checking(guess)
при условии, конечно что в функции будет объявлен входящий параметр.
Ну и конечно, return возвратит в любой модуль всё, что в нем указано. Если бы было в условии не пользоваться return, то тут можно было бы в этом модуле объявить глобальную переменную, и ее в функции изменять. Или объявить класс, и в нем переменную класса, тоже вариант.