我正在学习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。在也可以是无。如果节点是叶子,就是这种情况。
答案 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
将是True
或False
*)。
内置类型有rules for boolean evaluation;简而言之,空容器和序列(dict
,list
,tuple
,set
,str
等)加上零数值({{1} },0
,0.0
等)和0j
评估None
- y,其他任何内容都被视为False
- y。用户实现的类型通常遵循此约定。
这使True
成为一个方便的快捷方式,例如if root
或if 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:
False
,None
,所有类型的数字零,以及空 字符串和容器(包括字符串,元组,列表, 字典,集合和frozensets)。解释所有其他值 是的。 (有关更改此方法的方法,请参阅__nonzero__()
特殊方法。)
在您的情况下,由于root
似乎是用户定义类型的实例(它有left
和right
成员,没有内置类型,所以要么已实施__nonzero__
方法,要么None
或类似&#34;空&#34;传入的对象表示没有&#34; left&#34;和&#34;对&#34;。