да, это поведение по умолчанию python. Но есть некоторые нюансы, о которых вы должны знать:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
global_var1 = {}
global_var2 = 10
global_var3 = []
def manipulate_globals1():
# this is the behavior you want
global_var1['new_entry'] = 10
global_var3.append(10)
# this would fail
# global_var2 += 10
# but this works
global global_var2
global_var2 += 10
def manipulate_globals2():
# here we create scoped variables with the same name as the globals
global_var1 = []
global_var2 = 5
if __name__ == '__main__':
print(global_var1, global_var2, global_var3)
manipulate_globals1()
print(global_var1, global_var2, global_var3)
manipulate_globals2()
print(global_var1, global_var2, global_var3)
Если вы хотите манипулировать неконтейнерными переменными внутри функции, вы можете сделать это следующим образом:
создать файл globals.py с содержанием:
a = 10
b = 20
в вашем основном / основном файле:
import globals
def manipulate_globals():
globals.a = 20
globals.b = 30
if __name__ == '__main__':
manipulate_globals()
print(globals.a, globals.b)
Хотя это плохая практика, и вы не должны использовать глобальные инфляции