一行if条件赋值
我有以下这段代码
num1 = 10
someBoolValue = True
我需要在someBoolValue
为True
的时候,把num1
的值设为20
;如果不是,就什么都不做。所以,我写了这样的代码
num1 = 20 if someBoolValue else num1
有没有什么方法可以避免...else num1
这一部分,让代码看起来更简洁?也就是说,想找一个和这个效果相同的写法
if someBoolValue:
num1 = 20
我试着把它换成...else pass
,像这样写:num1=20 if someBoolValue else pass
。结果我只得到了语法错误。而且我也不能直接省略...else num1
这一部分。
14 个回答
40
对于未来从谷歌来的时间旅行者,这里有一种新的方法(从Python 3.8开始可以使用):
b = 1
if a := b:
# this section is only reached if b is not 0 or false.
# Also, a is set to b
print(a, b)
这被称为“海象运算符”。更多信息可以查看Python 3.8的新特性页面。
71
使用这个:
num1 = 20 if someBoolValue else num1
311
我觉得在Python里这可能做不到,因为你实际上想做的事情可能会变成这样:
num1 = 20 if someBoolValue else num1
如果你去掉 else num1
,你会收到一个语法错误,因为我很确定赋值操作必须返回一些东西。
正如其他人提到的,你可以这样做,但这不好,因为下次你再看那段代码时,可能会让自己搞糊涂:
if someBoolValue: num1=20
我也不太喜欢 num1 = someBoolValue and 20 or num1
,原因是一样的。我得认真想想那行代码到底在干嘛。
其实实现你想做的事情最好的方法是用原来的写法:
if someBoolValue:
num1 = 20
之所以这样写是最好的版本,是因为你想做的事情非常明显,这样你自己不会搞混,也不会让其他以后接触这段代码的人困惑。
另外,顺便提一下, num1 = 20 if someBoolValue
是有效的Ruby代码,因为Ruby的工作方式有点不同。