这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 + y
or x * y
,它从数字x
and中产生不同的数字y
,但我们可以拥有a and b
or ,它从真值anda or b
中产生不同的真值。a
b
但该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
语句和运算符and
and or
)不是对精确的真值进行操作,而是对“真实”值进行操作。简而言之,数字 0、空容器和字符串以及特殊值在您将它们提供给期望真值的操作时None
就像False
它们一样,而其他所有东西都像它们一样True
。我们有时会使用术语“真实”或“虚假”来描述不一定True
或False
表现得好像真实的价值观。
同样,从现有真值产生新真值的操作,例如and
但or
不一定返回True
or False
,它们可能会返回您给它们的值,即上表要求的“真”或“假”。
但是,如果有人读到这篇文章是在学习用真值编程的早期阶段,我强烈建议你忽略这一点,只是认为自己在操纵True
and False
,同样不要担心“短路评估”和检查事物的顺序(如果只涉及真实True
和False
涉及,甚至在大多数情况下使用其他值时都无关紧要)。一旦你掌握了基础知识,就很容易扩展你对这些概念的理解。