一行if-condition-assignment

我有以下代码

num1 = 10 someBoolValue = True 

如果someBoolValueTrue ,我需要将num1的值设置为20 ; 别的什么都不要做 所以,这是我的代码

 num1 = 20 if someBoolValue else num1 

有没有我可以避免...else num1部分,使其看起来更清洁? 等同于

 if someBoolValue: num1 = 20 

我试着用...else pass代替它,像这样...else passnum1=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