and
/ or
运算符如何在数字(甚至字符串)之间工作?
5 and 7 # this returns 7
7 and 5 # this returns 5
21 and 4 # this returns 4
4 and 21 # this returns 21
and
运算符在这种情况下如何工作?
答案 0 :(得分:3)
和/或:
5和7#7
它首先检查5并发现它是'True'所以它也检查第二个并返回最后一个。
0和5#0
它首先检查并且发现为零,因此无论下一个值是什么,它总是为零,因此它返回0
2或3和4#2
第一个值是2('True')并找到OR因此值始终为true所以返回2
(2或3)和4#4
现在返回4.
答案 1 :(得分:1)
当and
与整数一起使用时,如果所有值都非零,它将为您提供最后一个值,如果至少有一个值,则为零。
1 and 2 and 3 #3
1 and 0 and 3 #0
答案 2 :(得分:1)
它返回最后一个值True
(如果有任何True值)。
对于and
python需要检查每个值,所以如果它们都是true则返回最后一个,如果其中一个为False,则返回该值。如果所有这些都是False则返回第一个,因为Python也不需要检查第二个。
对于or
python,首先检查第一个,直到有时候它变为True,所以如果第一个值为True则返回该值,如果第一个为False但第二个为True,则返回第二个。如果它们都是False则返回最后一个。
等于False的值:"",0,False,0j, 0.0, [], {}, set()
。
答案 3 :(得分:0)
让我们拆解!
>>> import dis
>>> def check_and(a, b):
... return a and b
...
>>> dis.dis(check_and)
2 0 LOAD_FAST 0 (a)
3 JUMP_IF_FALSE_OR_POP 9
6 LOAD_FAST 1 (b)
>> 9 RETURN_VALUE
现在它很简单。
1.加载到堆栈(它变为TOS
- 堆栈值的顶部。
2. JUMP_IF_FALSE_OR_POP尝试评估TOS(堆栈顶部)的布尔值。如果是,则从堆栈中删除该值,如果不是,则设置字节码计数器(在我们的例子中,它将junmp到第9行。
3.按b进行堆叠。
4.回归。
我无法确定为什么评估顺序在另一种情况下有所不同,但正如您所看到的,如果第一个评估值为True
,则会返回第二个评估值。
or
和其他运营商也是如此。试着自己拆解它们。
如果你想快速检查一下,这很方便。而不是写:
def check(value)
if value:
return value
else:
return "No value"
你可以写:
def check(value):
return value or "No value"