闭包Python报错<function counter.<locals>.incr at 0x03003660>
来源:互联网 发布:中国网络诗歌网高研班 编辑:程序博客网 时间:2024/06/14 01:12
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。(简单说这个外部作用域的变量就是自由变量)
闭包将内部函数自己的代码和作用域以及外部函数的作用域结合起来。
闭包的词法变量不属于全局名称空间域或者局部的------而属于其他的名称空间,带着“流浪”的作用域。
>>> def make_addr(assend):
def adder(gugend):
return assend+gugend
return adder
>>> p=make_addr(23)
>>> q=mkde_addr(44)
>>> print(p(100))
123
>>> print(q(100))
144
分析一下:
我们发现,make_adder是一个函数,包括一个参数assend,比较特殊的地方是这个函数里面又定义了一个新函数,这个新函数里面的一个变量正好是外部make_adder的参数.也就是说,外部传递过来的assend参数已经和adder函数绑定到一起了,形成了一个新函数,我们可以把assend看做新函数的一个配置信息,配置信息不同,函数的功能就不一样了,也就是能得到定制之后的函数.
再看看运行结果,我们发现,虽然p和q都是make_adder生成的,但是因为配置参数不同,后面再执行相同参数的函数后得到了不同的结果.这就是闭包.
<function counter.<locals>.incr at 0x03003660>
>>> def counter(start_at = 0):
count = [start_at]
def incr():
count[0] +=1
return count[0]
return incr
>>> count = counter(5)
>>> print(count)
<function counter.<locals>.incr at 0x03003618> 我的程序在执行的时候就会报这个错。各种百度都找不到错误啊。上面的代码完全是照着书敲的啊,看来书上也有错误呢。
>>> def counter(start_at = 0):
count = [start_at]
def incr():
return count[0]+1
return incr()
>>> c=counter(7)
>>> print(c)
8
眼尖的看出是什么原因了么??
- 闭包Python报错<function counter.<locals>.incr at 0x03003660>
- Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x000001DB1D7557
- python Counter
- Python操作Redis之Incr
- python中的locals()
- Python:locals 和 globals
- python locals globals
- python locals函数
- 编译报错LINK : fatal error LNK1000: Internal error during Incr的解决
- 【Python】 Python:locals 和 globals
- 【Python】 Python:locals 和 globals
- Python,用pip安装包,报错
- Python包安装报错解决方法
- python之globals()和locals()
- python execfile()和locals()函数
- Python 内置函数 locals globals
- $(function(){})报错
- enumerate Counter in python
- ListView点击监听无效
- Matlab字符串及其运算,字符串函数及二维字符串
- PDF EXPERT FOR MAC 您专业的PDF编辑器
- Shell命令截取字符串
- xynu1781 彩灯统计
- 闭包Python报错<function counter.<locals>.incr at 0x03003660>
- java数据结构
- xposed hook框架的使用(一)
- 1940-计算小费
- ListView联动
- 管理学十大经典定理
- Spatial Structures UVA
- 有名管道(命名管道)
- jQuery之css样式操作、value属性值操作和复选框操作