2015-04-12 68 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值。

* 除非“魔术方法”在一个非标准的方式来实现