python的可变长度参数(*args)在函数调用时扩展生成器吗?

Dav*_*Eyk 9 python iteration function generator

请考虑以下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)
Run Code Online (Sandbox Code Playgroud)

是否*args在通话时自动扩展发电机?换句话说,我在gen内部迭代两次f(*gen),一次扩展*args,一次迭代args?或者是生成器保持原始状态,而迭代只在for循环期间发生一次?

Sve*_*ach 14

在函数调用时扩展生成器,因为您可以轻松检查:

def f(*args):
    print(args)
foo = ['foo', 'bar', 'baz']
gen = (f for f in foo)
f(*gen)
Run Code Online (Sandbox Code Playgroud)

将打印

('foo', 'bar', 'baz')
Run Code Online (Sandbox Code Playgroud)