2015-04-12 67 views
1

我目前在學python,遇到這個函數。這是什麼情況試圖比較?

def min(root, min_t): # min_t is the initially the value of root 
    if not root: 
     return min_t 

    if root.key < min_t: 
     min_t = root.key 

    min_t = min(root.left, min_t) 
    min_t = min(root.right, min_t) 

    return min_t 

我很困惑,「如果不是根」的意思。它試圖給予什麼樣的條件?如果「根」不是什麼? 「如果」試圖做什麼比較?

UPDATE:根是具有子樹self.left和self.right二叉樹。在也可以是無。如果節點是葉子,就是這種情況。

回答

1

boolean operations Python語言參考說明這一點:

在布爾運算的情況下,以及當表達式用於 通過控制流語句,下面的值被解釋作爲 假:FalseNone,所有類型的數字零,空 字符串和容器(包括字符串,元組,列表, 字典,集合和frozensets)。所有其他值被解釋爲 爲真。 (請參閱__nonzero__()特殊方法來改變這種情況。)

在你的情況下,由於root似乎是一個用戶定義的類型(它有leftright成員,其中沒有內置的類型有),它或者具有實現的__nonzero__方法,或的一個實例None或傳入類似的「空」對象以表示沒有「左」和「右」。

3

在Python中,你沒有一定要比較什麼別的東西。

if root檢查,在默認情況下,如果變量根具有內容,或者如果它是一個空的變量。 讓我通過例子說明你:

if "" 
if 0 
if None 
if [] 
if {} 
if() 

都會返回False

雖然任何其他值將返回true。

1

在Python,if expr:真正意義if bool(expr):,即它的計算結果無論是給表達它,然後將結果轉換成布爾(在很多情況下,當然,這是已經一個布爾值,如x > yTrueFalse *)。

內置的類型有rules for boolean evaluation;總之,空容器和序列(dictlisttuplesetstr等)加零的數值(00.00j等)和NoneFalse評估-y,別的被認爲True -y。用戶實現的類型通常遵循這個約定。

這允許if root是例如一個方便的快捷方式if root != 0if len(root) > 0,這取決於預期的是什麼類型的對象root。請注意,None通常是每the style guide,用if name is not None進行測試;這可讓您輕鬆區分None和其他False -y值。

* 除非「魔術方法」在一個非標準的方式來實現