一行if-condition-assignment
我有以下代码
num1 = 10 someBoolValue = True
如果someBoolValue
为True
,我需要将num1
的值设置为20
; 别的什么都不要做 所以,这是我的代码
num1 = 20 if someBoolValue else num1
有没有我可以避免...else num1
部分,使其看起来更清洁? 等同于
if someBoolValue: num1 = 20
我试着用...else pass
代替它,像这样...else pass
: num1=20 if someBoolValue else pass
。 我得到的只是语法错误。 我也不能忽略...else num1
部分。
谢谢
我不认为这在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代码, num1 = 20 if someBoolValue
,因为Ruby的工作方式有点不同。
用这个:
num1 = 20 if someBoolValue else num1
在一行中:
if someBoolValue: num1 = 20
但是不要这样做。 这种风格通常不是预期的。 为了清晰和一致,人们更喜欢更长的forms。
if someBoolValue: num1 = 20
(同样,应该避免骆驼帽,所以应该使用some_bool_value
。)
请注意, some_value if predicate
没有else
部分的some_value if predicate
不存在,则expression式 some_value if predicate
不存在,因为如果谓词为假,则不会有返回值。 但是,expression式在所有情况下都必须有明确的返回值。 这与Ruby或Perl中的用法不同。
您可以使用下列之一:
(falseVal, trueVal)[TEST] TEST and trueVal or falseVal
不,我想你是希望像num1 = 20 if someBoolValue
会工作,但事实并非如此。 我认为最好的办法就是用你写的if
语句:
if someBoolValue: num1 = 20
num1 = 20 * someBoolValue or num1