nonlocal作用:
Python 3 引入了 nonlocal 声明。它的作用是把变量标记为自由变量, 即使在函数中为变量赋予新值了,也会变成自由变量。如果为 nonlocal 声明的变量赋予新 值,闭包中保存的绑定会更新。主要应用在闭包中,将不可变类型的数据变为自由自由变量,对于可变类型的数据,在闭包中就没有必要用到这个参数了,这也很好理解,有这样的区别,主要是函数作用域的问题所引起的,对于可变类型,只是一个引用(地址)所以没有作用域的问题。
自由变量:
这是一个技术术语,指未在本地 作用域中绑定的变量。这也很好理解,如字面意思,其变量是自由的,不会再函数的因作用域的问题变为局部变量。

例如:

def make_averager():     count = 0     total = 0 def averager(new_value):        count += 1         total += new_value         return total / count return averager

对于上面这个例子其实是有问题的,因为python的编译规则使得其中定义的变量(count ,total )变为局部变量,而闭包在执行的时候他会抛弃本地作用域的东西(因为在调用外部函数的时候,函数已经返回。)

解决在代码中加上nonlocal声明就可以了。

def make_averager():     count = 0     total = 0 def averager(new_value):        nonlocal count, total count += 1         total += new_value         return total / count return averager

结果:

python nonlocal 的应用相关推荐

  1. python nonlocal 与 global 详解

    变量作用域问题 case1 通常在函数之外无法访问到函数内的变量 def f1():a=1 print(a) NameError: name 'a' is not defined case2 但函数内 ...

  2. python nonlocal的用法_简谈Python3关键字nonlocal使用场景

    下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...

  3. python nonlocal的用法_python global和nonlocal用法解析

    这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ◆global和nonloca ...

  4. python nonlocal 什么意思_python nonlocal的理解使用

    nonlocal 可以将一个变量声明为非本地变量, 在python的lru_cache看到了使用 def decorator(func): a = 1 def wrapper(*args, **kwa ...

  5. Python nonlocal 与 global 关键字解析

    nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer():x = 1def inner():x = 2print("in ...

  6. Python nonlocal

    global关键字 我们知道global关键字用于表示全局变量. name = 'root'def outer():name = 'admin'def inner():global name # 引用 ...

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

    很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的 "nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量" 看完以后我感觉自己是懂了,但光从这句 ...

  8. python nonlocal的用法_python中的global和nonlocal关键字怎么使用

    global 和 nonlocal关键字 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. 以下实例修改全局变量 num: #!/usr/bin/python3 ...

  9. python nonlocal叠加_python nonlocal 的具体原理

    很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的 "nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量" 看完以后我感觉自己是懂了,但光从这句 ...

最新文章

  1. Java类加载机制详解【java面试题】
  2. 【词汇】preci-词根、ap-前缀、de-前缀、ous-后缀、ify-后缀、ise-后缀
  3. 3DSlicer24:Module-Create Scripted
  4. LVS负载均衡-NET、DR模式配置
  5. 一个立即关闭显示器的小软件(Masm开发,只有3KB大小)
  6. C# 整数转二进制字符串
  7. java 8 new feature_java 8 new feature --- default method
  8. 【学习总结】数学-基本计数方法
  9. tomcat start 无法启动_解密Springboot内嵌Tomcat
  10. 2020【第十一届蓝桥杯省赛】 C/C++ B组 (第一场)
  11. 自动化学报-英文版-LaTeX模板
  12. 转:: 刺鸟:用python来开发webgame服务端(2)
  13. wps序号打乱重新排序_wps表格 已经排好序号 ,顺序错误,想重新排列
  14. Echart中series自定义formatter文字样式
  15. 我的世界刷猪人塔java版_我的世界主世界僵尸猪人刷怪塔制作教程
  16. 鸿蒙系统全球发布,鸿蒙系统正式发布,全球瞩目!
  17. [渝粤教育] 天水师范学院 地球科学概论 参考 资料
  18. Jodd-Java的瑞士军刀 demo
  19. 解决Python官网打不开
  20. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)

热门文章

  1. HTTP ---code错误状态码大全
  2. Verilog编程之乘法器的实现
  3. PCB设计新手入门须知
  4. winhex中判断+MBR+DBR+EBR方法
  5. python爬虫(四)数据存储
  6. 你真的了解Linux(Deepin)的软件商店吗?(内附极力推荐的软件)
  7. vue——数字加逗号分隔
  8. 历届上海国际电影节获奖名单
  9. linux http status404,解决问题:HTTP Status 404(The requested resource is not avail
  10. 考试 --微信小程序学习用demo:考证通,在线题库类小程序