python nonlocal深度理解
nonlocal关键字用来在函数或其他作用域中使用并修改外层(非全局)变量。意义:nonlocal使用能够弥补global和闭包的两个问题。对于global,只能使用全局变量,对于嵌套函数中的内层函数而言,无法通过global使用外层函数,通过nonlocal就可以,当然直接读取也可以(闭包)。对于闭包,内层函数可以读取外层函数的变量,但是如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类
·
nonlocal关键字用来在函数或其他作用域中使用并修改外层(非全局)变量(逐层到外面作用域找,直到全局作用域之前的局部作用域)。
意义:nonlocal使用能够弥补global和闭包的两个问题。
对于global,只能使用全局变量,对于嵌套函数中的内层函数而言,无法通过global使用外层函数,通过nonlocal就可以,当然直接读取也可以(闭包)。
对于闭包,内层函数可以读取外层函数的变量,但是如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal,如果变量为可变类型,则不需要添加nonlocal。
'''
nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。
'''
def work():
x = 0
def new_work():
nonlocal x
x=x+3
return x
return new_work
f=work()
print(f())
print(f())
print(f())
'''打印结果
3
6
9'''
'''
使用global 实现
'''
a =0
def new_work():
global a
a=a+3
return a
print(new_work())
print(new_work())
print(new_work())
'''
打印结果
3
6
9
'''
'''
闭包= 函数+环境变量
'''
def dosometing():
a =25
def add(x):
d=a+x
return d
return add
a = 10
f=dosometing()
print(f(5))
print(f(5))
print(f(5))
'''
打印结果
30
35
40
'''
使用总结:
1、局部作用域改变全局变量用global, global同时还可以定义新的全局变量
2、内层函数改变外层函数变量用nonlocal, nonlocal不能定义新的外层函数变量,只能改变已有的外层函数变量
3、同时nonlocal不能改变全局变量
链接: 引用.
更多推荐
已为社区贡献1条内容
所有评论(0)