python - 使用三元运算符解压列表

标签 python python-3.x

当我只想在条件为真时解压列表时,我偶然发现了一种奇怪的行为。

如何根据条件使用拆包(*)?

示例:

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/

相关文章:

python - 如何在 Kubuntu 14.04 上为 Python 3 安装 PyWavelets?

python - 我可以在模板字符串中使用切片吗?

python - 值错误: A `Concatenate` layer should be called on a list of at least 2 inputs

python - 位置数字总和(两个数字根据其位置的数字之和)

python -/django.db.utils.IntegrityError : NOT NULL constraint failed/after python manage. py 迁移应用程序零

python - 根据 Python 中的月份列表制作列表

python - 使用 Chr() 发送十六进制值会添加未知字节

python - 检查列表是否仅包含从 1 到 9 的所有数字,没有重复

python - 在 Sphinx 文档中保留包装/修饰的 Python 函数的默认参数

python - 我可以使方法成为生成器而不是返回生成器吗?