Python if和按位&;在同一条线上
我浏览了一个开源项目,发现了这个python方法。我知道&和是如何测试结果是否错误的 在Python中,诸如Python if和按位&;在同一条线上,python,bitwise-operators,Python,Bitwise Operators,我浏览了一个开源项目,发现了这个python方法。我知道&和是如何测试结果是否错误的 在Python中,诸如False、None、0、空字符串、空列表等值是“False”,而其他值是truthy。在这种情况下,它有效地将按位AND的结果与零进行比较 if (int & (1 << position)) != 0: # same thing if(int&(1if语句检查表达式的“真实性”。例如,如果您有: if some_expression: ... 这相当于写
False
、None
、0
、空字符串、空列表等值是“False”,而其他值是truthy。在这种情况下,它有效地将按位AND的结果与零进行比较
if (int & (1 << position)) != 0: # same thing
if(int&(1if语句检查表达式的“真实性”。例如,如果您有:
if some_expression:
...
这相当于写:
if bool(some_expression):
...
你不必显式调用<代码>布尔()/代码>,但是如果你想这样做的话,它的危害相对较小。有些程序员认为它是坏的风格,因为它不是严格必需的。
这不是必需的,因为Python中的每个表达式都有一个truthiness值
False
(显然)
None
- 0(作为int、long、float或任何其他数字类型)
- 空字符串,无论是str还是unicode(这种区别主要存在于Python2.x中)
- 空列表、元组、集合、字典和其他容器类型
自定义类还可以通过实现声明它们的真实性
因此,对于您的特定问题,即使表达式的计算结果为2,也将执行if/else的“if”部分,因为在布尔上下文中,任何非零int都将被视为True。这只是测试是否设置了特定位,例如get_位(4,2)='1'
,而get_位(4,1)=='0'
虽然在变量名int
中使用python关键字是非常糟糕的做法。注意4=0100
,注意get_位(7,2)=='1'
作为7=0111
。你不是说不为零吗?@achampion是的,修复了。
if bool(some_expression):
...