在阅读python中的逻辑运算符时,我遇到了表达式:
5 and 1
Run Code Online (Sandbox Code Playgroud)
输出:1
5 or 1
Run Code Online (Sandbox Code Playgroud)
输出:5
任何人都可以解释这是如何工作的?
我知道,操作数的的逻辑运算符是布尔
这是有据可查的:
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上的术语以及维基百科上的提及都有讨论.