python nonlocal的用法_python nonlocal 的具体原理

python nonlocal的用法_python nonlocal 的具体原理很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的“nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量”看完以后我感觉自己是懂了,但光从这句话来说还没完全理解它的真实含义nonlocaldefmake_average():series=[]defaverage(new_value):series.append(new_value)total=sum(s…

大家好,欢迎来到IT知识分享网。python nonlocal的用法_python nonlocal 的具体原理

很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的

“nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量”

看完以后我感觉自己是懂了,但光从这句话来说还没完全理解它的真实含义nonlocal

def make_average():

series=[]

def average(new_value):

series.append(new_value)

total = sum(series)

return. total/len(series)

return averager

average = make_average()

average(10). -> 10

average(11). – >10.5

series 是make_average 的局部变量,当average=make_average()以后,make_average()已经返回了,本地作用域已经一去不返

其实在average函数中 series是自由变量,并未在本地作用域中绑定的变量

可以通过average__code__.co_varname 查看局部变量, average.__code__.co_freevars 查看自由变量

series 绑定在返回的average的__closure__属性中, average.__closure__, average__closure__[0].cell_contents 里面存储series里的数据

但如果把series改为了int 类型的不可变类型在average里面尝试改变它的值时就会报错,这时候如何处理,就需要加nonlocal ,它的作用就是变量申明为自由变量

结论:

如果在内部函数中只是仅仅读外部变量,可以不在此变量前加nonlocal

如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal,如果变量为可变类型,则不需要添加nonlocal

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21976.html

(0)
上一篇 2024-01-12 16:45
下一篇 2024-01-13 20:45

相关推荐

发表回复

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

关注微信