使用三元运算符分配两个变量
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
语句。
这是正常的 if
s:
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'")
有没有办法在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
语句。
这是正常的 if
s:
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'")