2015-04-07 14 views
1

我在浏览一个开源项目并碰到了这个python方法。我知道&和< <位运算符是如何工作的,但我不确定if else语句在这种情况下是如何工作的。我可以说int = 2,position是= 1,if语句的结果是2(10 base 2),但是如果语句compare 2与if语句的结果是什么呢?我将如何评估其他语句?if和bitwise&on同一行

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

这只是测试是否设置了特定位,例如, 'get_bit(4,2)=='1'',而'get_bit(4,1)=='0''尽管对变量名“int”使用python关键字是非常糟糕的做法。 – AChampion

+0

注意'4 = 0100',注意'get_bit(7,2)=='1''为'7 = 0111'。 – AChampion

回答

2

它测试结果是否有误。

在Python中,诸如False,None,0,空字符串,空列表等的值是“虚假的”,而其他值则是真实的。在这种情况下,它有效地比较了按位AND与零的结果。

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

难道你不是指零不? – AChampion

+0

@achampion是的,修复。 –

1

if语句检查表达式的“真实性”。举例来说,如果你有:

if some_expression: 
    ... 

这相当于写作:

if bool(some_expression): 
    ... 

你不必调用bool()明确,但如果你想有比较小的伤害这样做。一些程序员认为它是不好的风格,因为它不是绝对必要的。

这不是必须的,因为Python中的每个表达式都有一个真实值。是假的事情是:

  • False(明显)
  • None
  • 0(作为int,长整型,浮点,或任何其他数字类型)
  • 空字符串,是否STR或的unicode(其大多仅在Python2.x存在区别)
  • 空列表,元组套,字典和其它容器类型

自定义类还可以通过执行__nonzero__来声明它们的真实性。

因此,就您的具体问题而言,即使表达式计算结果为2,if/else的“if”部分也会被执行,因为任何非零int在布尔上下文中都将被视为True。