Python中的逻辑运算符

BoR*_*Ris 4 python

在阅读python中的逻辑运算符时,我遇到了表达式:

  5 and 1 
Run Code Online (Sandbox Code Playgroud)

输出:1

  5 or 1 
Run Code Online (Sandbox Code Playgroud)

输出:5

任何人都可以解释这是如何工作的?
我知道,操作数的的逻辑运算符是布尔

hir*_*ist 9

这是有据可查的:

x or y      if x is false, then y, else x 
x and y     if x is false, then x, else y 
Run Code Online (Sandbox Code Playgroud)

两者都是短路的(例如,如果是真的or则不会评估).yx

该文档还指出了被认为falsy(False,0,None,空序列/映射,...) -一切被认为是truthy.

几个例子:

7 and 'a'             # -> 'a'
[] or None            # -> None
{'a': 1} or 'abc'[5]  # -> {'a': 1}; no IndexError raised from 'abc'[5]
False and 'abc'[5]    # -> False; no IndexError raised from 'abc'[5]
Run Code Online (Sandbox Code Playgroud)

注意最后两个如何显示短路行为:第二个语句(会引发一个IndexError)不会被执行.

你的操作数是布尔值的声明有点没用.python确实有布尔(实际上只有2个:True和False;它们是int的子类型).但是python中的逻辑操作只是检查操作数是真的还是假的.该操作数不会调用该bool函数.


似乎没有在官方python文档中使用术语truthy和falsy.但是在这里教python和社区的书确实使用这些术语.关于english.stackexchange.com上的术语以及维基百科上的提及都有讨论.