作用域由大到小分为:
built_in-------global------enclosing------locals
count=10
def add():
print(count)就认为count=10,如果要修改则函数会报错
如果一定要这样修改,可以给count一个定义:
count=10
def add():
global count
print(count)
count=4
print(count)
add()
小结
1,变量查找顺序LEGB,作用局部域>作用域外层>当前模块中的全局>python内置的作用域
2,只有模块,类,以及函数才会有作用域
3,对于一个变量,内部作用域先声明就会覆盖外部变量,不声明就会直接使用
4,内部作用域要修改外部作用于变量的值时,全局变量要使用关键字global,
嵌套作用域要使用nonlocal关键字,nonlocal时python3新增的关键字,有了这个关键字,就能完美的实现闭包了
count=4#这样会报错,因为在global域中count=10,当在函数调用
# 了count=10,函数内部enlosing域