这种情况试图比较什么?

时间:2015-04-12 10:18:00

标签: python python-3.x

我正在学习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

我对“if not root”意味着什么很困惑。它试图给出什么条件?如果“根”不是什么?比较是“如果”试图制作?

UPDATE:Root是一个二叉树,它有子树self.left和self.right。在也可以是无。如果节点是叶子,就是这种情况。

3 个答案:

答案 0 :(得分:3)

在python中,你不必将某些东西与其他东西进行比较。

默认情况下,

if root检查变量root是否有内容,或者它是否为空变量。 让我通过例子解释你:

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

将全部返回False

虽然任何其他值都会返回True。

答案 1 :(得分:1)

在Python中,if expr:实际上意味着if bool(expr):,即它评估给出的任何表达式然后将结果转换为布尔值(在许多情况下,当然,它是已经布尔值,例如x > y将是TrueFalse *)。

内置类型有rules for boolean evaluation;简而言之,空容器和序列(dictlisttuplesetstr等)加上零数值({{1} },00.0等)和0j评估None - y,其他任何内容都被视为False - y。用户实现的类型通常遵循此约定。

这使True成为一个方便的快捷方式,例如if rootif root != 0,具体取决于预期的对象类型if len(root) > 0。请注意,root通常按None进行if name is not None测试;这样,您就可以轻松区分None和其他False - y值。

* 除非&#34;魔术方法&#34;以非标准方式实施

答案 2 :(得分:1)

boolean operations上的Python语言参考解释了这一点:

  

在布尔运算的上下文中,以及表达式时   在控制流语句中使用时,将解释以下值   as false:FalseNone,所有类型的数字零,以及空   字符串和容器(包括字符串,元组,列表,   字典,集合和frozensets)。解释所有其他值   是的。 (有关更改此方法的方法,请参阅__nonzero__()特殊方法。)

在您的情况下,由于root似乎是用户定义类型的实例(它有leftright成员,没有内置类型,所以要么已实施__nonzero__方法,要么None或类似&#34;空&#34;传入的对象表示没有&#34; left&#34;和&#34;对&#34;。