您的位置:首页 > 编程语言 > Python开发

【Python】闭包 & 匿名函数

2017-03-18 22:04 197 查看
闭包

1、注意:返回的函数内部不要使用后续会发生变化的变量。

def f():
gs = []
for k in range(1, 4):
def g(i):
return i + k
gs.append(g)
return gs


例如这段代码感觉上应该返回三个函数分别return i+1、return i+2、return i+3(i为新函数参数),但事实却是得到了三个return i+3。

>>> from test import f
>>> g1, g2, g3 = f()
>>> g1(0)
3
>>> g2(0)
3
>>> g3(0)
3


2、如果一定要得到return i+1、return i+2、return i+3这三个函数怎么办?
可以这样

def f():
gs = []
gs.append(lambda x : x + 1)
gs.append(lambda x : x + 2)
gs.append(lambda x : x + 3)
return gs


但是要得到return i + 1 ~ return i + 100就行不通了,这时候可以

def f():
hs = []
def g(i):
def h(j):
return j + i
return h
for k in range(1, 3):
hs.append(g(k))
return hs


这段代码可以这样看:f()最终返回一个函数list->hs,那么hs需要append什么呢?append n个reuturn i+n函数。这些函数又怎么得到呢?利用内部的函数返回得到。更清晰的版本:

def f():
# 返回函数的函数
def g(i):
return lambda j : i + j
# 获取元素为函数的list
hs = []
for k in range(1, 5):
hs.append(g(k))
return hs


匿名函数=lambda
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: