Вместо использования оператора global
, как предлагается во всех других ответах, не используйте переменные уровня модуля, а используйте класс в качестве контейнера или другой модуль только для глобальных переменных:
# mg.py
bar = 5
# server.py
import mg
def foo():
mg.bar = 10
или
class mg:
bar = 5
def foo():
mg.bar = 10
Таким образом, вам не нужно помещать global
операторов везде, вы можете использовать эти имена повторно, и становится ясно, на какой bar
вы ссылаетесь.
Редактировать: Также можно импортировать модуль внутри себя, но вы не можете изменить переменные в основном модуле таким образом. Так что это будет работать:
# selfimport.py
import selfimport
def foo():
print selfimport.foo
bar = 3
if __name__ == '__main__':
print selfimport.bar
foo()
Но это не будет:
# selfimport.py
import selfimport
bar = 3
def foo():
selfimport.bar = 5
if __name__ == '__main__':
print selfimport.bar
foo()
print bar # bar is still 3!
Если вы используете глобальные переменные только в качестве констант, вам все равно не понадобится оператор global
. Вам также необходимо убедиться, что код, который вы хотите выполнить только в главном модуле, обернут в оператор if
, как указано выше, иначе вы будете повторяться.