当我只想在条件为真时解压列表时,我偶然发现了一种奇怪的行为。
如何根据条件使用拆包(*)?
示例:
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
最佳答案
这不会被解析为在左侧的 *l
和右侧的 l
之间进行选择。 l if True else l
被求值,然后结果被无条件解包。
没有办法让函数调用表达式有条件地解包或不解包参数。如果您将 *
放在那里,就会有东西被解压。您可以做的是将 l
包装在另一个列表中并将其解压:
foo(*(l if condition else [l]))
关于python - 使用三元运算符解压列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75448574/