一行if条件赋值

2024-04-25 20:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

num1 = 10
someBoolValue = True

如果someBoolValueTrue,则需要将num1的值设置为20;否则不执行任何操作。所以,这是我的代码

num1 = 20 if someBoolValue else num1

有什么方法可以避免...else num1部分,让它看起来更干净吗?相当于

if someBoolValue:
    num1 = 20

我试着用...else pass替换它,就像这样:num1=20 if someBoolValue else pass。我得到的只是语法错误。我也不能省略...else num1部分。


Tags: 方法代码trueifpasselse省略语法错误
3条回答

使用这个:

num1 = 20 if someBoolValue 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

这是最好的verison的原因,因为很明显你想做什么,你不会把自己搞糊涂,也不会让其他人在以后接触到这段代码。

另外,顺便说一下,num1 = 20 if someBoolValue是有效的Ruby代码,因为Ruby的工作方式有些不同。

一行:

if someBoolValue: num1 = 20

但别那么做。通常不需要这种样式。人们更喜欢较长的形式,为了清晰和一致。

if someBoolValue:
    num1 = 20

(同样,应避免戴骆驼帽。所以应该使用some_bool_value。)

请注意,没有else部分的内联表达式some_value if predicate不存在,因为如果谓词为false,则不会有返回值。但是,在所有情况下,表达式都必须具有明确定义的返回值。这与Ruby或Perl中的用法不同。

相关问题 更多 >