python lambda 使用过程中应该注意的事项
https://blog.csdn.net/weixin_45877312/article/details/125069645
从这篇博客里看到了有趣的现象
if __name__ == '__main__':
import dis
def plus1(num):
return num + 1
func = [] # 存放10个lambda函数的列表
for i in range(10):
i = int(i)
func.append(lambda: plus1(i))
result_1 = []
# 循环调用10个lambda函数
for i in range(10):
result_1.append([f'i 循环:{i}',func[i]()])
i = 15
result_1.append(['//'*40])
for k in range(10):
result_1.append([f'i 固定:{k}', func[k]()])
print(result_1)
dis.dis(plus1)
dis.dis(func[0])
程序输出如下图:
可以很明显的看到,尽管我们实例化了lambda函数对象,但是其仍通过全局变量i来指定传入函数中的变量,因此可以通过主函数赋值的方式影响lamda函数。这意味着,对于同时实例化的lambda对象,若想获得相同的结果必须注意lambda传入的参数是否有被更改;若想获得不一样的结果则必须在对每次调用lambda函数前检查是否已更改相应的参数。