我偶然发现了一个奇怪的行为,当我想只在条件为真时才解包一个列表。
如何根据条件使用解包(*)?
示例:
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
1条答案
按热度按时间nnsrf1az1#
这不会被解析为在左边的
*l
和右边的l
之间进行选择。l if True else l
被求值,然后结果被无条件地解包。没有办法让一个函数调用表达式有条件地解包或不解包一个参数。* 如果你在那里放了一个
*
,* 有些东西 * 会被解包。你可以做的是把l
Package 到另一个列表中,然后解包它: