关于 python 中使用 lambda 表达式的问题
来源:互联网 发布:免费网页数据采集软件 编辑:程序博客网 时间:2024/06/06 07:45
如果你定义如下一个python的lambda 函数:
------------------------------
def doLambda(val):
print "value 2:", val
commands = []
for value in range(5):
print "value 1:", value
commands.append(lambda:doLambda(value))
for c in commands:
c()
------------------------------
当你调用的时候却发现:doLambda 的value 总是4 ,如下:
>>>
value 1: 0
value 1: 1
value 1: 2
value 1: 3
value 1: 4
value 2: 4
value 2: 4
value 2: 4
value 2: 4
value 2: 4
正确的方式应该如下:
-------------------------------
def wrapper(val):
def inner():
print "value 2:", val
return inner
commands = []
for value in range(5):
print "value 1:", value
commands.append(wrapper(value))
for c in commands:
c()
-------------------------------
>>>
value 1: 0
value 1: 1
value 1: 2
value 1: 3
value 1: 4
value 2: 0
value 2: 1
value 2: 2
value 2: 3
value 2: 4
或者:
-----------------------------------
######
>>> commands = []
>>> def sayNumber(n):
... print n
...
>>> for i in range(5):
... commands.append((lambda v: lambda: sayNumber(v))(i))
...
>>>
>>> for c in commands:
... c()
...
0
1
2
3
4
######
-----------------------------------
- 关于 python 中使用 lambda 表达式的问题
- python中lambda表达式的使用
- 关于java中Lambda表达式的使用(粗解)
- Python中lambda表达式
- Python中lambda表达式
- Python中lambda表达式
- Python中lambda表达式
- python lambda 表达式使用
- Python中lambda的使用
- python中lambda的使用
- Python中lambda表达式的应用
- python lambda表达式的介绍和使用
- 关于boost中lambda表达式的学习
- Python的Lambda表达式
- Python的Lambda表达式
- Python的Lambda表达式
- java8中Lambda表达式的使用
- Java中Lambda表达式的使用
- 转贴人生的34个好习惯,共勉
- 异常处理(三、C++语言异常处理)
- Lucene基础排序算法
- asp.net数据库连接字符串集合
- 异常处理(四、MFC异常处理)
- 关于 python 中使用 lambda 表达式的问题
- JavaScript使用技巧精萃
- 逆向工程打造隐蔽后门
- [原创]幸福?
- 异常处理(五、结构化异常处理)
- Asp.Net细节性问题技巧精萃
- Eclipse工作台中的Preference(3)(完)
- 异常处理(六、各种异常处理的对比)
- 论程序设计方法[转帖]