python闭包变量迟邦定
16lz
2021-01-22
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]
更多相关文章
- Python:lambda表达式实现求两个变量的最大值
- Python:Sympy定义与包含变量的边界的积分
- “全局变量是坏的”是什么意思?
- 环境变量的安装以及python cahrm的安装以及常用快捷键的使用
- tensorflow 变量定义路径//问题
- 变量和数据类型
- python的全局变量与局部变量实验
- 在混合的Bash-Python代码片段中,变量的双引号和单引号
- 即使我返回2个变量,对象也不可迭代?