具有"if"条件的单行多变量值赋值

Cha*_*ath 3 python

可以为多个变量赋值.

a, b = 5, 10
Run Code Online (Sandbox Code Playgroud)

我需要根据条件分配这些值,我试过,

a, b = 1, 1 if c == 1 else 5, 10
Run Code Online (Sandbox Code Playgroud)

结果是一个ValueError.

ValueError:要解压缩的值太多

我尝试了两个条件,这是成功的.

a, b = 1 if c == 1 else 5, 1 if c == 1 else 10
Run Code Online (Sandbox Code Playgroud)

但我需要使用单一if条件,单行来实现这一目标.我知道这会降低可读性.但仍有可能吗?我在这做错了什么?

Ala*_*air 14

您可以通过(a, b)括号括起来实现这一点.

a, b = (1, 1) if c == 1 else (5, 10)
Run Code Online (Sandbox Code Playgroud)

当前代码相当于

a, b = 1, (1 if c == 1 else 5), 10
Run Code Online (Sandbox Code Playgroud)

当您尝试将3元组解压缩为两个变量时,会出现值错误.


Pad*_*ham 5

您还可以使用以下结果进行索引c == 1:

a, b = ((5, 10), (1, 1))[c == 1]
Run Code Online (Sandbox Code Playgroud)

结果c == 1要么是True -> 1False -> 0,所以我们最终会采取(1, 1)即指数1如果条件评估为真或(5, 10)0如果是假的.