Python 这个条件试图比较什么?

Python 这个条件试图比较什么?,python,python-3.x,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)

我目前正在学习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
我很困惑,如果不是根,它意味着什么。它试图给出什么条件?如果根不是什么?如果你想做一个什么样的比较


更新:根是一个二叉树,它有self.left和self.right两个子树。In也可以是None。如果节点是一个叶子,则会出现这种情况。

在python中,您不必将某个内容与其他内容进行比较

if root默认情况下检查变量root是否有内容,或者是否为空变量。 让我举例说明:

if ""
if 0
if None
if []
if {}
if ()
都会返回False吗


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

在python中,您不必将某个值与其他值进行比较

if root默认情况下检查变量root是否有内容,或者是否为空变量。 让我举例说明:

if ""
if 0
if None
if []
if {}
if ()
都会返回False吗

而任何其他值都将返回True。

在Python中,if expr:really意味着if boolexpr:,即它对给定给它的任何表达式求值,然后将结果转换为布尔值。当然,在许多情况下,它已经是布尔值,例如x>y将是True或False*

内置类型有:;简言之,空容器和序列dict、list、tuple、set、str等加上零数值0、0.0、0j等,没有一个计算False-y,其他任何值都被视为True-y。用户实现的类型通常遵循此约定

这使if root成为一个方便的快捷方式,例如if root!=0或lenroot>0,具体取决于对象根的类型。注意,根据,如果name不是None,则通常使用if测试None;这使您可以轻松区分None和其他False-y值

*除非在Python中以非标准方式实现magic方法,否则if expr:真的意味着if boolexpr:,即它计算给定给它的任何表达式,然后将结果转换为布尔值。当然,在许多情况下,它已经是布尔值了,例如x>y将是真或假*

内置类型有:;简言之,空容器和序列dict、list、tuple、set、str等加上零数值0、0.0、0j等,没有一个计算False-y,其他任何值都被视为True-y。用户实现的类型通常遵循此约定

这使if root成为一个方便的快捷方式,例如if root!=0或lenroot>0,具体取决于对象根的类型。注意,根据,如果name不是None,则通常使用if测试None;这使您可以轻松区分None和其他False-y值


*除非magic方法是以非标准方式实现的

上的Python语言参考说明了这一点:

在布尔运算的上下文中,以及当表达式 由控制流语句使用,解释以下值 as false:false、None、所有类型的数字零和空 字符串和容器,包括字符串、元组、列表、, 字典、套装和冷冻套装。将解释所有其他值 没错。有关更改此项的方法,请参阅“非零”特殊方法


在您的例子中,由于root似乎是一个用户定义类型的实例,它有左成员和右成员,而内置类型没有左成员和右成员,因此它要么实现了_unonzero_uu方法,要么没有或传入类似的空对象来表示没有左成员和右成员。

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

在布尔运算的上下文中,以及当表达式 由控制流语句使用,解释以下值 as false:false、None、所有类型的数字零和空 字符串和容器,包括字符串、元组、列表、, 字典、套装和冷冻套装。将解释所有其他值 没错。有关更改此项的方法,请参阅“非零”特殊方法

在您的例子中,由于root似乎是一个用户定义类型的实例,它有左成员和右成员,而内置类型没有左成员和右成员,因此它要么实现了_nonzero________________________方法,要么传入一个或类似的空对象以表示没有左成员和右成员