zoukankan      html  css  js  c++  java
  • 记一次错误

    def multipliers():
        return [lambda x : i * x for i in range(4)]
    print (list(m(2) for m in multipliers()))
    
    
    #[6, 6, 6, 6]

    上述问题产生的原因是 Python 闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。因此,当任何由 multipliers()返回的函数被调用时,i 的值将在附近的范围进行查找。那时,不管返回的函数是否被调用,for 循环已经完成,i 被赋予了最终的值 3。

    解决方法:

    1.一种是用Python生成器

    def multipliers():
        for i in range(4): yield lambda x : i * x
    print (list(m(2) for m in multipliers()))

    还有一种

    def multipliers():
       return [lambda x, i=i : i * x for i in range(4)]
    print (list(m(2) for m in multipliers()))
  • 相关阅读:
    小故事
    设计模式
    git分支
    git简单操作
    ab命令压力测试
    libcheck ARM交叉编译
    libxml2 ARM 交叉编译
    I.MX6 安装LTIB
    为ARM编译Glib
    QT 4.8 中文显示问题
  • 原文地址:https://www.cnblogs.com/wdz1226/p/10596963.html
Copyright © 2011-2022 走看看