python-3.x 使用三元运算符解包列表

pnwntuvh  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(160)

我偶然发现了一个奇怪的行为,当我想只在条件为真时才解包一个列表。
如何根据条件使用解包(*)?
示例:

def foo1(x1, x2):
    print(x1, x2)

def foo2(x):
    print(x)

l = [7,8]
foo1(*l if True else l) # this works
foo2(*l if False else l) # this does not work
foo1(l if not True else *l) # this does not work
nnsrf1az

nnsrf1az1#

这不会被解析为在左边的*l和右边的l之间进行选择。l if True else l被求值,然后结果被无条件地解包。
没有办法让一个函数调用表达式有条件地解包或不解包一个参数。* 如果你在那里放了一个*,* 有些东西 * 会被解包。你可以做的是把l Package 到另一个列表中,然后解包它:

foo(*(l if condition else [l]))

相关问题