python nonlocal深度理解

python nonlocal深度理解nonlocal 关键字用来在函数或其他作用域中使用并修改外层 非全局 变量 意义 nonlocal 使用能够弥补 global 和闭包的两个问题 对于 global 只能使用全局变量 对于嵌套函数中的内层函数而言 无法通过 global 使用外层函数 通过 nonlocal 就可以 当然直接读取也可以 闭包 对于闭包 内层函数可以读取外层函数的变量 但是如果在内部函数中尝试进行修改外部变量 且外部变量为不可变类型 则需要在变量前加 nonlocal 如果变量为可变类型 则不需要添加 nonlocal nonl

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

(0)
上一篇 2026年3月17日 下午11:31
下一篇 2026年3月17日 下午11:31


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号