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不能改变全局变量
链接: 引用.
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218773.html原文链接:https://javaforall.net
