Текст моей программы аналогичен этому, и я использовал счетчик циклов в качестве переменной в модуле, но на выходе выдает ошибку.?!!
основная программа:
for i in range(3):
import day
модуль:
x = 3 + i
print(x)
ошибка: name 'i' is not defined
Я хочу использовать счетчик циклов в другом модуле, как мне это сделать?
Если бы i
был создан в другом модуле, вы могли бы import anothermodule
и затем получить к нему доступ с помощью anothermodule.i
, но переход из основного скрипта в модуль был бы довольно сложным.
Модули не имеют общих переменных (т. е. области действия ), поэтому импортируемый вами модуль никогда не сможет получить доступ к переменным в модуле, который его импортирует. ( По крайней мере, не косвенно.)
Кроме того, импорт модуля более одного раза не имеет никакого эффекта, поскольку модули кэшируются. (Есть некоторые предостережения по этому поводу, но они не имеют значения.)
Вместо этого вам следует определить функцию в day
, которая принимает параметр , который мы могли бы назвать i
, но я собираюсь вызвать его k
, чтобы избежать путаницы. Затем в основной программе импортируйте функцию из day
и передайте i
в качестве аргумента.
Основная программа:
from day import some_function
for i in range(3):
some_function(i)
day.py
:
def some_function(k):
x = 3 + k
print(x)
Вывод из основной программы:
3
4
5
«никогда не сможет получить доступ» — после import __main__
он может получить доступ __main__.i
нормально.
@nocomment Ха! Я никогда не слышал об этом раньше. Отредактировано, чтобы упомянуть об этом. Тем не менее, __main__
— это только модуль верхнего уровня. Я имел в виду любой модуль импорта в иерархии импорта.
Попробуйте этот подход:
Создайте внутри модуля функцию, которая принимает i
и которая затем будет вызываться из основной программы.
В main.py:
from day_module import day_func
for i in range(3):
day_func(i)
В модуле day_module.py:
def day_func(i):
x = 3 + i
print(x)
Выход:
3
4
5
Чтобы использовать переменную, определенную в другом модуле, импортируйте ее из этого модуля. В чем сложность?