考虑以下Python代码:
def f(*args):
for a in args:
pass
foo = ['foo', 'bar', 'baz']
# Python generator expressions FTW
gen = (f for f in foo)
f(*gen)
*args
会在通话时自动展开发电机吗?换句话说,我在gen
内迭代f(*gen)
两次,一次展开*args
,一次迭代args?或者生成器是保持原始状态,而迭代只在for循环中发生一次?
答案 0 :(得分:13)
在函数调用时扩展生成器,因为您可以轻松检查:
def f(*args):
print(args)
foo = ['foo', 'bar', 'baz']
gen = (f for f in foo)
f(*gen)
将打印
('foo', 'bar', 'baz')
答案 1 :(得分:2)
为什么不查看gen
中f()
的内容?添加print args
作为第一行。如果它仍然是一个生成器对象,它会告诉你。我希望解压缩的参数能把它变成一个元组。
答案 2 :(得分:1)
你真的不需要
gen = (f for f in foo)
调用
f(*foo)
将输出
('foo', 'bar', 'baz')