关于Python匿名函数的问题

def gen_func():
    return [lambda i:i*2 for i in range(4)]

result = [func(2) for func in gen_func()]

请问result结果是什么,WHY?

Helenr
浏览 330回答 4
4回答

慕的地10843

gen_func函数返回一个列表(包含函数的列表),列表的每一项是一个函数(该函数接受一个参数i,返回2*i)所以,result为[4, 4, 4, 4]

慕神8447489

>>> def gen_func() :...  return [lambda i=i:i*2 for i in range(4)] ...>>> [func(2) for func in gen_func()] [4, 4, 4, 4] >>> [func() for func in gen_func()] [0, 2, 4, 6] >>>不要覆盖默认参数值

眼眸繁星

In [38]: def gen_func():    return [lambda i,j=i:(i,j) for j in range(4)]   ....:In [39]: result = [func(2) for func in gen_func()]In [40]: print result[(2, 3), (2, 3), (2, 3), (2, 3)]

慕的地6264312

[labmda i:i*2 for i in range(4)]正确写法应该是: [(lambda i:i*2) for i in range(4)]即lambda的函数体只能是一个可以放在函数的return后面的表达式.所以前面的i为lambda的函数内的局部变量, 后面的i为lambda函数外面的更大作用域内的变量.总之是函数的作用域和函数的生命周期的问题.
打开App,查看更多内容
随时随地看视频慕课网APP