Table of Contents
1 Python中的闭包
1.1 用Python实现闭包遇到的问题
在Python实现分析脚本时,想用闭包实现获取一个递增的id函数,遇到一个问题,在运行时,报外部变量没有找到。 代码如下:
def getIdx():
idx = 0
def getIdxEx():
idx += 1
return idx
return getIdxEx
idxFun = getIdx()
print(idxFun())
print(idxFun())
通过网上查找,发现Python中不可变变量(int,str等类型)不能作为闭包的外部变量。在Python3中可以通过nonlocal解决。正确代码如下:
def getIdx():
idx = 0
def getIdxEx():
nonlocal idx
idx += 1
return idx
return getIdxEx
idxFun = getIdx()
print(idxFun())
print(idxFun())
1.2 nonlocal和global的区别
- global是用来指定全局变量的,如在函数作用域中需要修改全局变量值
- nonlocal是用来绑定非全局变量的外部变量,如闭包
Date: 2013-08-04 19:17:26 中国标准时间
Table of Contents
1 Python中的闭包
1.1 用Python实现闭包遇到的问题
在Python实现分析脚本时,想用闭包实现获取一个递增的id函数,遇到一个问题,在运行时,报外部变量没有找到。 代码如下:
def getIdx(): idx = 0 def getIdxEx(): idx += 1 return idx return getIdxEx idxFun = getIdx() print(idxFun()) print(idxFun())
通过网上查找,发现Python中不可变变量(int,str等类型)不能作为闭包的外部变量。在Python3中可以通过nonlocal解决。正确代码如下:
def getIdx(): idx = 0 def getIdxEx(): nonlocal idx idx += 1 return idx return getIdxEx idxFun = getIdx() print(idxFun()) print(idxFun())
1.2 nonlocal和global的区别
- global是用来指定全局变量的,如在函数作用域中需要修改全局变量值
- nonlocal是用来绑定非全局变量的外部变量,如闭包
Date: 2013-08-04 19:17:26 中国标准时间