文章目录
- 问题描述:如题
- 示例代码:
def func():
res = []
for i in range(10):
f = lambda x: f"x+{i}"
res.append(f)
return res
def call(a):
func_list = func()
for f in func_list:
print(f(a))
if __name__ == '__main__':
call(10)
- 运行代码会输出
x+2
x+2
x+2
- 原因解释:
lambda x: f"x+{i}"
,其中i
不属于lambda函数的形参,在被调用时 只能沿着作用域链往外找,会在func函数
的局部作用域内找到最后一次i
被赋值为2
。 - 解决方案:把lambda套在另一个
create
函数内,使每次的i
都有单独的局部作用域。
def func():
res = []
for i in range(3):
# f = lambda x: f"x+{i}"
f = create(i)
res.append(f)
return res
def create(i):
return lambda x: f"x+{i}"
def call(a):
func_list = func()
for f in func_list:
print(f(a))
if __name__ == '__main__':
call(10)
- 运行输出:
x+0
x+1
x+2
版权声明:本文为weixin_42359693原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。