if 和按位 & 在同一行

if and bitwise & on the same line

我在浏览一个开源项目时遇到了这个 python 方法。我知道 & 和 << 按位运算符是如何工作的,但我不确定 if else 语句在这种情况下是如何工作的。我可以说 int = 2 and position is = 1 并且 if 语句结果为 2(10 base 2),但是这个 if 语句将 2 与什么进行比较?我将如何评估 else 声明?

 def get_bit(int, position):
    if int & (1 << position):
        return '1'
    else:
        return '0'

它测试结果是否为假。

在Python中,FalseNone0、空字符串、空列表等值是"falsey",而其他的是真实的。在这种情况下,它实际上是将按位与的结果与零进行比较。

if (int & (1 << position)) != 0: # same thing

if 语句检查表达式的 "truthiness"。例如,如果您有:

if some_expression:
    ...

相当于写:

if bool(some_expression):
    ...

您不必显式调用 bool(),但如果您愿意,这样做的危害相对较小。一些程序员认为它是糟糕的风格,因为它不是绝对必要的。

没有必要,因为 Python 中的每个表达式都有一个真值。错误的是:

  • False(显然)
  • None
  • 0(作为 int、long、float 或任何其他数字类型)
  • 空字符串,无论是 str 还是 unicode(主要只存在于 Python2.x 中的区别)
  • 空列表、元组、集合、字典和其他容器类型

自定义 类 也可以通过实施 __nonzero__.

来声明其真实性

因此,对于您的特定问题,即使表达式的计算结果为 2,您的 if/else 的 "if" 部分也会被执行,因为任何非零整数都将被视为 True在布尔上下文中。