python中的含义是什么?

loc*_*boy 26 python

嗨,我遇到了以下代码

numdigits = len(cardNumber)
oddeven = numdigits & 1
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?我不确定"&"是做什么的.

dka*_*ins 41

回答

&标志是位AND运算符.与1一起使用时,它基本上会屏蔽该值以提取最低位,或者换句话说,它会告诉您该值是偶数还是奇数.

有关Python &运算符的更多信息

有关更多信息,请参阅:http://wiki.python.org/moin/BitwiseOperators

为什么它可以检查奇数与偶数

编辑:添加此部分,因为这个答案得到了一些爱

将值与1进行AND运算表明该值是奇数还是偶数的原因最初可能并不明显.

数字的二进制表示基本上是每个2的幂的一系列YES或NO的总和,从最右边的数字开始向左移动,1,2,4,8 ......

只有一种方法可以用这种方式表示任何数字.例如,数字13(基数10)可以二进制写为"1101"(或十六进制为0xD,但不在该点旁边).看这里:

    1   1   0   1
    x   x   x   x
    8   4   2   1
    =   =   =   =
    8 + 4 + 0 + 1  =  13
Run Code Online (Sandbox Code Playgroud)

请注意,除最右边的二进制数字外,所有其他1数字都会为总和添加偶数(即2的倍数).因此,获得奇数最终总和的唯一方法是从最右边的数字添加奇数1.因此,如果我们好奇数字是奇数还是偶数,我们可以查看它的二进制表示并忽略除最右边数字之外的所有数字.

为此,我们使用按位AND运算符.该值1以二进制表示为1:

    0   0   0   1
    x   x   x   x
    8   4   2   1
    =   =   =   =
    0 + 0 + 0 + 1  =  1
Run Code Online (Sandbox Code Playgroud)

如果设置了最右边的位,如果不是1,1那么对这样的值进行AND 运算将导致该值0.

因为0在大多数语言中通常被认为是"假",而非零值被认为是"真实的",我们可以简单地说作为捷径:

if (value & 1): do_something_with_odd_value()...
Run Code Online (Sandbox Code Playgroud)


cry*_*ick 14

此外,&也使用用于拍摄的两个相交的Python组:

set1 = {0,1,2,3}
set2 = {2,3,4,5}
print(set1 & set2)
>>>set([2, 3])
Run Code Online (Sandbox Code Playgroud)


wim*_*wim 5

这是一个按位运算,在这种情况下,oddeven如果cardNumber有偶数个元素(否则为一个)分配零。

例如:假设len(cardNumber) == 235. 然后numdigits == 235,这是0b11101011二进制的。现在1'0b00000001'二进制,当你“与”它们时,按位,你会得到:

  11101011
  &
  00000001
  ----------
= 00000001
Run Code Online (Sandbox Code Playgroud)

同样,如果numdigits是 234,你会得到:

  11101010
  &
  00000001
  ----------
= 00000000
Run Code Online (Sandbox Code Playgroud)

所以,它基本上是一种检查是否len(cardNumber) % 2. 可能是由具有 C 背景的人编写的,因为它不是很 Pythonic - 可读性很重要!