Python的可变长度参数(*args)在函数调用时会展开生成器吗?
考虑以下的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
会自动展开生成器吗?换句话说,在f(*gen)
中,我是不是对gen
进行了两次迭代,一次是为了展开*args
,另一次是为了遍历参数?还是说生成器保持原样,迭代只在for循环中进行一次?
3 个回答
-1
其实你并不需要
gen = (f for f in foo)
调用
f(*foo)
会输出
('foo', 'bar', 'baz')
2
为什么不去看看在 f()
里面的 gen
是什么呢?可以在第一行加上 print args
。如果它还是一个生成器对象,打印出来就能告诉你了。我觉得参数解包应该会把它变成一个元组。
14
当你调用这个生成器函数的时候,它会被展开,你可以很容易地验证这一点:
def f(*args):
print(args)
foo = ['foo', 'bar', 'baz']
gen = (f for f in foo)
f(*gen)
将会打印出
('foo', 'bar', 'baz')