为什么我在单行中使用条件时不能在 python if else 语句中使用 pass [重复]

问题描述 投票:0回答:4

我想检查某个项目是否在列表中,如果没有,我想将其附加到列表中。

通常我会这样写:

if item not in list:
    list.append(item)
else:
    pass

但是,我已经到了尝试让代码更短的地步,并得到了这个:

list.append(item) if item not in list else list

公平地说,只有 list.append(item) if item not in list 是我自己的创作。 else声明是由于PyCharm的坚持。 现在我的问题是:为什么我不能用 pass 来跟进 else 语句,而必须写 list 来代替。我无法理解它,谷歌也没有提供帮助。

感谢您的澄清。

python if-statement
4个回答
3
投票

if
语句条件表达式之间有区别。

当你写作时

if condition:
    this()
else:
    that()

您正在撰写声明。它是一个命令式结构——它“做”某事。 else 位是可选的;如果省略,则如果条件不满足,该语句将不执行任何操作。

this if condition else that

构造是一个

表达式
。它计算一个值。它总是必须计算一个值,因此else位必须存在。使用它的副作用,例如通过调用`list.append(),它不会返回任何有用的东西,是......不完全错误,但是......好吧,这是错误的。不是技术上的,而是哲学上的。
因此,当您想要以两种可能的方式之一计算一个值,并且整个内容适合一行左右时,请使用条件表达式。如果您想做两件事中的任何一件,其中一件可能什么都不做,请使用 if 语句。

注意你写的

if temperature < 0: coat = thick else: coat = thin

但是

coat = thick if temperature < 0 else thin

在第一种情况下,您有一个 if 语句,用于选择执行两个赋值语句中的哪一个。在第二种情况下,您有一个赋值语句,它使用条件表达式来决定分配哪个值。

表达式可以用作语句(在这种情况下,它们的值将被忽略),但语句没有值,因此不能用作表达式。


2
投票
else

语句是多余的,即

if item not in a_list:
    list.append(item)

 就足够了,并且尽可能简短和惯用(不过,您可能想尝试一下集合来提高性能)。

在第二个片段中,您使用条件

表达式

附加到列表,这不是这些表达式的用途。无论条件如何,条件表达式都必须有一个值,而 pass 不是值。除非您需要根据条件计算值,否则请像上面一样使用条件

语句


2
投票

pass 是一个空操作——当它被执行时,什么也没有发生。当语法上需要语句但不需要执行任何代码时,它作为占位符很有用,例如:

def f(arg): pass # a function that does nothing (yet)

在Python中,如果您使用
ternary

运算符解释,这是不允许的,因此在

else
中您需要做一些事情。
所以你的解决方案是:

if item not in list: list.append(item)

或使用 
set()

set.add(item)



0
投票
and

运算符

进一步缩短代码
item not in list and list.append(item)

如果 
list.append(item)

返回

item not in list
,它只会执行 
True
    

© www.soinside.com 2019 - 2024. All rights reserved.