Python中数字之间的AND / OR运算符

时间:2017-12-07 08:30:53

标签: python

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运算符在这种情况下如何工作?

4 个答案:

答案 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"