使用类属性 可以在模块间共享数据
global_vars.py:
1 2 class GlobalVars : global_variable = "Hello, World!"
main.py:
1 2 3 4 5 6 7 8 9 from global_vars import GlobalVarsdef main () : print(GlobalVars.global_variable) GlobalVars.global_variable = "New value" print(GlobalVars.global_variable) if __name__ == "__main__" : main()
使用 Singleton 模式 如果你需要确保某个类只有一个实例,并且提供一个全局点来访问它,可以使用 Singleton 模式。
可以在模块间共享数据
singleton.py:
1 2 3 4 5 6 7 8 class Singleton : _instance = None def __new__ (cls) : if cls._instance is None : cls._instance = super(Singleton, cls).__new__(cls) cls._instance.global_variable = "Hello, World!" return cls._instance
main.py:
1 2 3 4 5 6 7 8 9 10 11 12 from singleton import Singletondef main () : s1 = Singleton() print(s1.global_variable) s1.global_variable = "New value" s2 = Singleton() print(s2.global_variable) if __name__ == "__main__" : main()
使用global关键字 注意
只能在模块内不同函数间共享
global 关键字用于声明一个变量是全局变量,但它只能在当前模块中生效。
也就是说,global 关键字的作用范围仅限于当前模块(Python 文件)。
在函数内部,如果你想修改全局变量,可以使用 global 关键字。
main.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 global_variable = "Hello, World!" def modify_global () : global global_variable global_variable = "New value" def main () : print(global_variable) modify_global() print(global_variable) if __name__ == "__main__" : main()
不定义也不会报错
1 2 3 4 5 6 7 8 def mfun () : global global_variable global_variable = 10 print("mfun:" , global_variable) if __name__ == "__main__" : mfun() print("__main__:" , global_variable)
这样就必须在外层定义,否则未调用方法前会报错
1 2 3 4 5 6 7 8 9 10 global_variable=5 def mfun () : global global_variable global_variable = 10 print("mfun:" , global_variable) if __name__ == "__main__" : print("__main__:" , global_variable) mfun() print("__main__:" , global_variable)
if __name__ == "__main__"中定义的变量不用加global,也是全局变量
1 2 3 4 5 6 7 def modify_global_variable(): print ("在 modify_global_variable 函数中修改后的变量:" , global_variable) if __name__ == "__main__" : global_variable = 10 print ("在 if 代码块中定义的变量:" , global_variable) modify_global_variable()
但是修改的时候要加global
1 2 3 4 5 6 7 8 9 10 def modify_global_variable () : global global_variable global_variable = 20 print("在 modify_global_variable 函数中修改后的变量:" , global_variable) if __name__ == "__main__" : global_variable = 10 print("在 __main__ 代码块中定义的变量:" , global_variable) modify_global_variable() print("在 __main__ 代码块中查看修改后的变量:" , global_variable)
也就是说
入口中定义的变量不用global声明也是全局变量。
函数中修改全局变量必须再使用global声明。