sel*_*oot 4 python generator call
当我在对象数组而不是字符串数组上读取Python string.join(list)的问题时,我找到以下句子:
', '.join(str(x) for x in list)
Run Code Online (Sandbox Code Playgroud)
我已经知道(str(x) for x in list)是一个生成器表达式,我也知道生成器是一个可迭代的.以下代码验证了我的视图的正确性.
>>> gen = (x for x in [1,2,3])
<generator object <genexpr> at 0x104349b40>
>>> from collections import Iterable
>>> isinstance(gen, Iterable)
True
Run Code Online (Sandbox Code Playgroud)
同时,str.join(iterable)返回一个字符串,该字符串是iterable中字符串的串联.所以以下工作正常,我希望如此.
>>> ",".join((str(x) for x in [1,2,3]))
'123'
Run Code Online (Sandbox Code Playgroud)
接下来是问题,为什么代码在下面工作得很好,为什么在函数调用中不需要括号.
', '.join(str(x) for x in [1,2,3])
Run Code Online (Sandbox Code Playgroud)
毕竟, str(x) for x in [1,2,3]它本身不是发电机.
>>> tmp = str(x) for x in [1,2,3]
File "<stdin>", line 1
tmp = str(x) for x in [1,2,3]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
这是在引入生成器表达式时指定的(PEP 289):
如果函数调用具有单个位置参数,则它可以是没有额外括号的生成器表达式,但在所有其他情况下,您必须将其括起来.
在你的情况下,它是一个位置参数,所以两种方式都是可能的:
', '.join(str(x) for x in [1,2,3])
', '.join((str(x) for x in [1,2,3]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |