我发现了一个有趣的问题,为什么要尝试为代码高尔夫挑战做以下事情:
>>> f=lambda s,z=len(s): 5+z
>>> f("horse")
11 #Expected 10
>>>
>>> def g(s,z=len(s)):
... print "z: ", z
... print "sum: ", 5+z
...
>>> g("horse")
z: 6
sum: 11
>>>
>>> len("horse") + 5 #Expected function operation
10
Run Code Online (Sandbox Code Playgroud)
创建功能两种方式似乎初始化z的6,而不是预期的5,为什么会出现这种情况?
python文档有一个解释这个的页面
定义函数时,Python的默认参数将被计算一次,而不是每次调用函数时
在您的情况下,s在创建lambda函数之前,必须已经绑定了一个长度为6的字符串.当python评估lambda定义时z=len(s),它将被计算为z=6.每次调用该函数时都不会再次处理它.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |