python lambda 使用过程中应该注意的事项

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函数前检查是否已更改相应的参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值