2015-04-07 54 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。

相關問題