zoukankan      html  css  js  c++  java
  • python闭包变量迟邦定

    python闭包变量迟绑定

    >>> def foo():
    ...     return [lambda x: i * x for i in range(4)]
    ...
    >>> print([m(3) for m in foo()])
    [9, 9, 9, 9]
    
    # 等价于
    
    >>> def foo():
    ...     l = []
    ...     for i in range(4):
    ...         def wrapper(x):
    ...             return i * x
    ...         l.append(wrapper)
    ...     return l
    ...
    >>> print [m(3) for m in foo()]
    [9, 9, 9, 9]
    
    
    # 想得到预期的做法
    
    >>> def foo():
    ...     return [lambda x, i = i: i * x for i in range(4)]
    ...
    >>> print [m(3) for m in foo()]
    [0, 3, 6, 9]
    
    # 等价于
    >>> def foo():
    ...     l = []
    ...     for i in range(4):
    ...         def wrapper(x, i=i):
    ...             return i * x
    ...         l.append(wrapper)
    ...     return l
    ...
    >>>
    >>> print [m(3) for m in foo()]
    [0, 3, 6, 9]
    
  • 相关阅读:
    uva 11549
    uva 11078
    uva 1335
    uva 1267
    uva 11520
    uva 12124
    uva 10795 A Different Task
    ACM俱乐部算法基础练习赛(1)
    【BZOJ1010】玩具装箱
    【BZOJ1901】Dynamic Rankings
  • 原文地址:https://www.cnblogs.com/fzw-/p/8325788.html
Copyright © 2011-2022 走看看