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]

更多相关文章

  1. Python:lambda表达式实现求两个变量的最大值
  2. Python:Sympy定义与包含变量的边界的积分
  3. “全局变量是坏的”是什么意思?
  4. 环境变量的安装以及python cahrm的安装以及常用快捷键的使用
  5. tensorflow 变量定义路径//问题
  6. 变量和数据类型
  7. python的全局变量与局部变量实验
  8. 在混合的Bash-Python代码片段中,变量的双引号和单引号
  9. 即使我返回2个变量,对象也不可迭代?

随机推荐

  1. Android基础总结八:ContentProvider
  2. 从无到有,支付路由系统升级打怪之路|原创
  3. CTF之Five86-1靶机***实战
  4. Android(安卓)S5PV210 camera驱动(tw9912)
  5. Vue 第一次 commit 原来是这个样子
  6. 人生新篇章
  7. 使用 apiDoc 为你的Node.js API 自动生成
  8. 一步步从头搭建 Vue 开发环境
  9. 8 个你不知道的 DOM 功能[每日前端夜话0x
  10. 从输入 URL 到展现涉及哪些缓存环节(非常