Eli*_*ICA 0 python language-lawyer python-3.x
(这都是Python 3.5.2上的)
在PEP 448的底部,我看到:
函数调用中不带括号的推导式(例如 )
f(x for x in it)已经有效。
这很有趣。如果我定义以下函数:
def f(a, b, c):
return a + b + c
Run Code Online (Sandbox Code Playgroud)
那么这个措辞让我这么认为f(thing for thing in [1, 2, 3]) == 6。但实际上,我得到:
>>> f(thing for thing in [1, 2, 3])
TypeError: f() missing 2 required positional arguments: 'b' and 'c'
Run Code Online (Sandbox Code Playgroud)
即整个生成器表达式作为 传递a。
那么PEP 448中的这句话是什么意思呢?只是您可以传递生成器表达式作为参数吗?
该语句仅意味着在PEP 之前的世界中f(x for x in it)已经有效,并且将生成器表达式作为第一个函数参数传递。
为了使您的示例正常工作,您需要显式解压生成器,如 PEP 示例中所示。
f(*(thing for thing in [1, 2, 3])) # returns 6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |