变量的作用域
Python查找一个变量时会按照局部作用域、嵌套作用、全局作用域和内置作用域的顺序进行搜索
def foo():b = 'hello'# Python中可以在函数内部再定义函数def bar():c = Trueprint(a) # 全局作用域print(b) # 嵌套作用域print(c) # 局部作用域# print(d)bar()# print(c) # NameError: name 'c' is not definedif __name__ == '__main__':a = 100# a 属于全局变量# print(b) # NameError: name 'b' is not definedfoo()# 输出100helloTrue
- global 关键字
def foo():'修改全局作用域下的变量a'# a = 200 # 不行global aa = 200 # 行b = 1000print(b)def bar():'修改嵌套作用域下的变量b'nonlocal bb = 2000bar()print(b)if __name__ == "__main__":a = 100print(a)foo()print(a)# 输出10010002000200
在实际的开发中需要减少全局变量的使用
- 为了降低代码的耦合
- 全局变量生命周期长会导致对象长期存在垃圾无法回收
如果希望把局部变量的生命周期延长,在函数调用结束后仍然使用,就需要使用闭包。
