python
中可以把函数作为返回值;
例如:
def autoincr(x):
def incr():
i = 1
while i < x:
yield i
i = i + 1
g = incr()
def retu():
return next(g)
return retu
在函数autoincr
中我们又定义了2个函数incr
和retu
,内部函数incr
可以应用外部函数autoincr
的参数和局部变量, 当autoincr
返回retu
时,相关参数和变量都保存在返回函数(incr
)中,这种程序结构称为“闭包(Closure)”.
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
例如:
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
打印f1~f3的值时,会发现都为9; 为什么呢?
因为函数里面返回引用了i
,但是函数返回fs
并非立即执行f
函数里面的return i*i
而是等待三个函数都return
时,才执行return i*i
但是,这时候i
的值已经为3
了.
lambda n: n % 2 == 1
关键字lambda
表示匿名函数,冒号前面的n
表示函数参数。
python 对匿名函数的支持有限, 只有一些简单情况可以使用匿名函数;
本文为Larwas原创文章,转载无需和我联系,但请注明来自larwas博客 https://larwas.com
最新评论