使用三元运算符分配两个变量

Assign two variables with ternary operator

有没有办法在python中使用三元运算符进行变量赋值(如下所示):

if(x>1):
    y="yes"
else:
    z="yes"

类似于(x='yes') if(x>1) else (z='yes'),但这会出错。还有其他方法吗?

我知道单变量赋值可以这样完成:x="yes" if(l==0) else "no"

编辑: 假设在 运行.

之前为 x、y 和 z 分配了一些值

不,你不能那样做。三元组中只能有表达式,不能有语句。 print 起作用是因为(至少在 Python 3 中)它是一个函数调用,因此是一个表达式;但赋值始终是一个语句。

您可以使用以下 hack,它采用元组解包:

y, z = ('yes', z) if x > 1 else (y, 'yes')

不要错过那些括号。

我真的不推荐使用它,因为它更难理解,有一个冗余的赋值语句,并且不必要地使用解包。我建议尽可能使用正常的 if 语句。

这是正常的 ifs:

if x > 1:
    y = 'yes'
    z = z
else:
    y = y
    z = 'yes'
varname = 'y' if x > 1 else 'z'

如果要分配一个全局变量:

globals()[varname] = 'yes'

如果要在对象上设置属性:

setattr(obj, varname, 'yes')

如果它是一个函数内部的局部变量,你必须更 hacky:

exec('%s = "yes"' % varname)

exec(varname + ' = "yes"')

您当然可以将 varname 的定义直接放在所有这些语句中以使其保持在一行中,我只是为了避免重复。

但实际上最好不要做任何这些。保持简单明了。

您可以像这样使用 exec 函数:

exec("y='yes'" if x > 1  else "z='yes'")