有人可以澄清这一点。如果我尝试编写此代码会发生什么:
if tomato = 1 or tomato = 2 or tomato = 3
...像这样:
if tomato = 1 or 2 or 3
我知道Python并不认为它是一样的,但它认为我在做什么?
最重要的是,如果我有一大堆番茄条件,最好的方法是什么。每次写“番茄=”似乎都不是很整洁。
答案 0 :(得分:2)
Python没有想到任何事情。它认识到语法有问题并抛出SyntaxError
。
要一次只检查多个值,您可以使用in
运算符:
if tomato in (1, 12, 25, 76, 84):
pass
另请注意,您必须使用两个等号(==
)来检查是否相等。
答案 1 :(得分:0)
如果您一直使用双等号,执行将如下所示:Python开始从左到右评估if
语句的谓词。如果tomato
的值为1,则第一部分的计算结果为True
,Python解释器继续评估if
块内的连续行(称为short-circuit evaluation)。
但是,如果tomato
的值不是1,则解释器继续评估谓词中的下一部分,即值2的整数。除零之外的所有整数值,求值为True
。这导致谓词的下一部分评估为True
,并且解释器继续执行if
块的内容。因此,您的谓词为tautology,无论True
具有什么值,始终都会评估为tomato
。
正如pp_所指出的,你应该使用双等号进行相等比较 - 否则该语句被认为是赋值,而在Python中,赋值语句没有真值,所以解释器会抛出{ {1}}。