python nonlocal 的应用
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 的应用相关推荐
- python nonlocal 与 global 详解
变量作用域问题 case1 通常在函数之外无法访问到函数内的变量 def f1():a=1 print(a) NameError: name 'a' is not defined case2 但函数内 ...
- python nonlocal的用法_简谈Python3关键字nonlocal使用场景
下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...
- python nonlocal的用法_python global和nonlocal用法解析
这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ◆global和nonloca ...
- python nonlocal 什么意思_python nonlocal的理解使用
nonlocal 可以将一个变量声明为非本地变量, 在python的lru_cache看到了使用 def decorator(func): a = 1 def wrapper(*args, **kwa ...
- Python nonlocal 与 global 关键字解析
nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer():x = 1def inner():x = 2print("in ...
- Python nonlocal
global关键字 我们知道global关键字用于表示全局变量. name = 'root'def outer():name = 'admin'def inner():global name # 引用 ...
- python nonlocal的用法_python nonlocal 的具体原理
很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的 "nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量" 看完以后我感觉自己是懂了,但光从这句 ...
- python nonlocal的用法_python中的global和nonlocal关键字怎么使用
global 和 nonlocal关键字 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. 以下实例修改全局变量 num: #!/usr/bin/python3 ...
- python nonlocal叠加_python nonlocal 的具体原理
很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的 "nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量" 看完以后我感觉自己是懂了,但光从这句 ...
最新文章
- Java类加载机制详解【java面试题】
- 【词汇】preci-词根、ap-前缀、de-前缀、ous-后缀、ify-后缀、ise-后缀
- 3DSlicer24:Module-Create Scripted
- LVS负载均衡-NET、DR模式配置
- 一个立即关闭显示器的小软件(Masm开发,只有3KB大小)
- C# 整数转二进制字符串
- java 8 new feature_java 8 new feature --- default method
- 【学习总结】数学-基本计数方法
- tomcat start 无法启动_解密Springboot内嵌Tomcat
- 2020【第十一届蓝桥杯省赛】 C/C++ B组 (第一场)
- 自动化学报-英文版-LaTeX模板
- 转:: 刺鸟:用python来开发webgame服务端(2)
- wps序号打乱重新排序_wps表格 已经排好序号 ,顺序错误,想重新排列
- Echart中series自定义formatter文字样式
- 我的世界刷猪人塔java版_我的世界主世界僵尸猪人刷怪塔制作教程
- 鸿蒙系统全球发布,鸿蒙系统正式发布,全球瞩目!
- [渝粤教育] 天水师范学院 地球科学概论 参考 资料
- Jodd-Java的瑞士军刀 demo
- 解决Python官网打不开
- 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)