这if两个语句的评估方式相同。
if something:
do_stuff
如果something为 True,则do_stuff块运行 [1]。如果something不是 True 则该do_stuff块不运行。您的两个 if 语句之间的区别不是一个“工作方式不同”,而是它们运行在不同版本的something.
and并且or是取真值并计算新真值的二元运算。就像在1 + 3中一样+是一个二元运算,它接受数字1并3产生一个新的数字4。a and b取两个真值a并b产生一个新值。尽管我们可以拥有x + yor x * y,它从数字xand中产生不同的数字y,但我们可以拥有a and bor ,它从真值anda or b中产生不同的真值。ab
但该if声明并不关心这一点。它不需要知道我们是如何得到它正在测试的真值的,它的工作方式完全相同。and并且or是完全独立的,它们只是组合真值以获得新值的方式。
and关于如何和工作的直觉or是基于我们在谈论可能对或错的事情时使用的一些方式and和英语。or
在“如果下雨了,那我就拿把伞”这句话中,“下雨了”部分是一个可能是真或假的条件,句子的其余部分是说如果它是真的会发生什么。用英语我也可以说“如果下雨了 , 我想走路,那我就拿把伞”;这将“正在下雨”和“我想走路”这两个单独的条件通过单词and组合成一个条件。这句话的意思是如果“正在下雨”和“我想走路”都是真的,我会得到一把雨伞;如果是晴天,那么我认为我不需要雨伞,如果我正在开车,那么我不在乎在我的房子和汽车之间被淋湿。
我也可以说“如果正在下雨 或者 我想走路,那么我会带把伞”。这句话的意思是,如果其中一个或两个条件都为真,我将得到一把雨伞。在这里我们可以猜测,如果下雨我想在当天晚些时候打伞,即使我不想走路,如果我想走路我想要一把伞,以防我走路的时候下雨,即使现在不下雨。
在编程和运算符中理解真值的最好方法and是or保持对英语的这种自然理解,and并or牢记在心。and这为您提供了一种快速理解涉及和的简单表达式的直观方式or。但是在编程的方式and和工作方式是形式化的,所以我们可以准确地or写下它们是如何工作的,而不管正常英语使用中的任何歧义或特殊情况。
A and B如果A为真且B为真,则为真,否则为假(如果其中一个为假A,则为B假)。A or B如果其中一个A或B为真,则为真(如果A为假且B为假,则为假,否则为真)。这是一个显示这一点的表格:
A | B | A and B
------+-------+---------
True | True | True
True | False | False
False | True | False
False | False | False
A | B | A or B
------+-------+--------
True | True | True
True | False | True
False | True | True
False | False | False
[1] 事实上,这个故事比这要复杂一些(我的整个答案都是如此)。Python 中的大多数布尔运算(包括if语句和运算符andand or)不是对精确的真值进行操作,而是对“真实”值进行操作。简而言之,数字 0、空容器和字符串以及特殊值在您将它们提供给期望真值的操作时None就像False它们一样,而其他所有东西都像它们一样True。我们有时会使用术语“真实”或“虚假”来描述不一定True或False表现得好像真实的价值观。
同样,从现有真值产生新真值的操作,例如and但or不一定返回Trueor False,它们可能会返回您给它们的值,即上表要求的“真”或“假”。
但是,如果有人读到这篇文章是在学习用真值编程的早期阶段,我强烈建议你忽略这一点,只是认为自己在操纵Trueand False,同样不要担心“短路评估”和检查事物的顺序(如果只涉及真实True和False涉及,甚至在大多数情况下使用其他值时都无关紧要)。一旦你掌握了基础知识,就很容易扩展你对这些概念的理解。