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

时间:2016-05-28 11:25:24

标签: python variable-assignment 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会被赋予一些值。

4 个答案:

答案 0 :(得分:4)

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

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

不要错过那些括号。

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

这与正常的if s:

相同
if x > 1:
    y = 'yes'
    z = z
else:
    y = y
    z = 'yes'

答案 1 :(得分:3)

您可以使用datas这样的功能:

exec

答案 2 :(得分:2)

不,你不能这样做。你只能在三元内部使用表达式而不是语句。 print有效,因为(至少在Python 3中)它是一个函数调用,因此是一个表达式;但任务总是一个声明。

答案 3 :(得分:2)

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

如果要分配全局变量:

globals()[varname] = 'yes'

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

setattr(obj, varname, 'yes')

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

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

exec(varname + ' = "yes"')

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

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