开发者社区> 问答> 正文

python闭包延迟?

python闭包延迟?

下边代码应该输出什么?

image.png

输出结果:image.png

为什么不是 [0,2, 4,6]

展开
收起
天枢2020 2020-03-12 13:35:52 462 0
1 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    分析一波 image.png

    i一直在被更新,期间的值分别等于 1、2、3。但对于la.append(ix),传递的只是i的引用,而且更重要的一点是函数对象ix没有马上执行,而是被添加到列表里。这导致前面添加的i*x中的i最终都指向了 3。

    那怎么避免这种问题呢?我们可以将i设为 lambda 表达式的参数,从而创建一个闭包环境,由函数本身来维护它的变量

    image.png

    运行结果:[0, 2, 4, 6]

    2020-03-12 13:39:39
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载