我在Python中发现了一些非常奇怪的行为。
我的一个学生在试图找到属于两个列表的元素时犯了某种错误,他写道:
list1 and list2
奇怪的行为是Python 3没有触发任何错误!
list1 and list2
实际上得到了一个值list2
。有什么已知的原因吗?
最佳答案
and
只需评估提供的两个值的真实性。
如果第一个是True
(请参见bool(list1)
),则计算并返回第二个。如果第一个参数是False
(例如[] and list2
),则立即返回其值。
在documentation on Boolean Operations中,清楚地说明了这种行为的基本原理:
请注意,and
和or
都不限制返回到False
和True
的值和类型,而是返回最后一个计算的参数。这有时很有用,例如,如果s
是一个字符串,该字符串应替换为默认值(如果该字符串为空),则表达式s or 'foo'
将生成所需的值。
(强调我的)
请注意,此行为不是用not
找到的,而是根据提供的参数返回一个True
/False
值。
关于python - 和Python list 上的运算子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40442432/