我正在浏览一个开源项目并遇到了这个python方法。我知道&和<<按位运算符可以工作,但我不确定if else语句在这种情况下是如何工作的。我可以说int = 2且position是= 1而if语句的结果是2(10 base 2),但这个if语句比较2到什么?以及如何评估else语句?
def get_bit(int, position):
if int & (1 << position):
return '1'
else:
return '0'
答案 0 :(得分:2)
测试结果是否为假。
在Python中,False
,None
,0
,空字符串,空列表等等值都是&#34; falsey&#34;,而其他值则是真实的。在这种情况下,它有效地将按位AND的结果与零进行比较。
if (int & (1 << position)) != 0: # same thing
答案 1 :(得分:1)
if语句检查表达式的“真实性”。例如,如果你有:
if some_expression:
...
这相当于写作:
if bool(some_expression):
...
您不必明确地致电bool()
,但如果您愿意,这样做的伤害相对较小。一些程序员认为它风格不好,因为它并不是绝对必要的。
没有必要,因为Python中的每个表达式都具有真实性值。错误的是:
False
(显然)None
自定义类还可以通过实现__nonzero__来声明其真实性。
因此,对于您的特定问题,即使表达式求值为2,也会执行if / else的“if”部分,因为在布尔上下文中任何非零int都将被视为True。 / p>