Технически, каждая переменная уровня модуля является глобальной, и вы можете связываться с ними из любого места. Простой пример, который вы, возможно, не осознали: sys
:
import sys
myfile = open('path/to/file.txt', 'w')
sys.stdout = myfile
sys.stdout
- глобальная переменная. Многие вещи в различных частях программы - включая части, к которым у вас нет прямого доступа, - используйте их, и вы заметите, что изменение здесь приведет к изменению поведения всей программы. Если что-нибудь и где-либо использует print()
, оно будет выводиться в ваш файл вместо стандартного вывода.
Вы можете настроить это поведение, просто создав common
исходный файл, который доступен для всего вашего проекта:
common.py
var1 = 3
var2 = "Hello, World!"
sourcefile1.py
from . import common
print(common.var2)
# "Hello, World!"
common.newVar = [3, 6, 8]
fldr/sourcefile2.py
from .. import common
print(common.var2)
# "Hello, World!"
print(common.newVar)
# [3, 6, 8]
Как видите, вы даже можете назначить новые свойства, которых не было вообще (common.newVar
).
Однако, может быть, лучше просто поместить dict
в common
и сохранить в нем свои различные глобальные значения - нажатие нового ключа к dict проще в обслуживании, чем операция. добавление нового атрибута в модуль.
Если вы используете этот метод, вы захотите с осторожностью делать from .common import *
. Это исключает возможность изменения ваших глобальных переменных из-за пространств имен - когда вы присваиваете новое значение, вы изменяете только свое локальное пространство имен.
Как правило, по этой причине вы не должны делать import *
, но это является частным симптомом этого.