当我读到这个问题Python string.join(list) on object array rather than string array时,我发现以下句子:
那么问题来了,为什么下面的代码也能正常工作,为什么在函数调用时不需要括号。
毕竟,
', '.join(str(x) for x in list)
我已经了解(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
同时,str.join(iterable)
会返回一个字符串,该字符串是可迭代对象中字符串的连接。因此,以下代码可以正常运行。
>>> ",".join((str(x) for x in [1,2,3]))
'123'
那么问题来了,为什么下面的代码也能正常工作,为什么在函数调用时不需要括号。
', '.join(str(x) for x in [1,2,3])
毕竟,
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