有没有一种方法可以在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分配了某些值。
有没有一种方法可以在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分配了某些值。
y, z = ('yes', z) if x > 1 else (y, 'yes')
别忘了那些括号。
我不建议使用这种写法,因为它更难理解,有一个多余的赋值语句,而且使用了不必要的解包。我建议在任何情况下都使用普通的if
语句。
这是使用普通的if
语句的写法:
if x > 1:
y = 'yes'
z = z
else:
y = y
z = 'yes'
(x='yes') if(x>1) else (z='yes')
。我会编辑答案。 - EvilTaky
和z
本来就必须被定义,因为在单行 if
中初始化变量是没有用的,如果 if
没有执行,那么值是不存在的。 - EvilTaky
、z
和x
都已定义。 - Ani Menonprint
可以工作,因为它是一个函数调用,因此是一个表达式;但赋值总是一个语句。varname = 'y' if x > 1 else 'z'
globals()[varname] = 'yes'
如果您想在对象上设置属性:
setattr(obj, varname, 'yes')
如果它是函数内的局部变量,你需要更加巧妙地处理:
exec('%s = "yes"' % varname)
或者
exec(varname + ' = "yes"')
当然,你可以直接在所有这些语句中放置varname
的定义,以使其保持在一行中,我只是避免重复。
但实际上最好不要这样做。保持简单和直接。
y
或z
。我的exec
与你标记为正确答案的完全相同,只是没有两次提到"yes"
。 - Alex Hallexec
函数:exec("y='yes'" if x > 1 else "z='yes'")
exec(("y" if x > 1 else "z") + "='yes'")
- Amit Gold
print('yes' if condition else 'no')
。 - jonrsharpe