奇怪的输出python

gar*_*may 6 python

请解释下面,我认为它应该打印为True或False,因为这些是布尔表达式.为什么它打印2 1然后1 2

print 1 and 2
print 2 and 1
print 1 or 2
print 2 or 1
Run Code Online (Sandbox Code Playgroud)

输出:

2
1
1
2
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 5

为什么你认为结果必须是布尔类型?

来自python wiki:

表达式x和y首先计算x; 如果x为false,则返回其 ; 否则,将评估y并返回结果.

表达式x或y首先评估x; 如果x为真,则返回其 ; 否则,将评估y并返回结果.

需要注意的是既不也不限制值并键入他们返回虚假与真实,而是返回最后一个变量.这有时是有用的,例如,如果s是一个字符串,如果它是空的,应该用默认值替换,表达式s or 'foo'产生所需的值.因为无论如何都不必发明一个值,所以它并不打算返回与其参数相同类型的值,因此例如,not 'foo'产生False,而不是''.