码迷,mamicode.com
首页 > 编程语言 > 详细

python nonlocal 的具体原理

时间:2019-07-06 16:21:36      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:用法   原理   如何   就会   绑定   int   series   average   new   

很多文章都大概列了下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 ,它的作用就是变量申明为自由变量 

python nonlocal 的具体原理

标签:用法   原理   如何   就会   绑定   int   series   average   new   

原文地址:https://www.cnblogs.com/yingchen/p/11143030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!