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中,False
、None
、0
、空字符串、空列表等值是"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在布尔上下文中。
我在浏览一个开源项目时遇到了这个 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中,False
、None
、0
、空字符串、空列表等值是"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在布尔上下文中。