在 python 中对树对象使用 And / Or
Using And / Or over tree objects in python
我浏览了一些 Python 笔记,我看到了这个示例及其工作发现,但我试图了解正在发生的事情。
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
T= TreeNode(5)
T.left = TreeNode(2)
T.right = TreeNode(7)
ans = T and T.left #===> This returns T.left, <--------- how?
ans2 = T or T.left #===> This returns T . <-------------?
ans3 = T.left and T.right #====> T.right <----- mind blows away :(, how , how ??
and/or 运算符在这里如何工作?我尝试查找 google,但它只向我展示了基本的 and/or 内容 :(.
and
和 or
运算符处理其操作数的 truthiness。所以
X and Y and Z and ...
return是第一个假操作数,如果它们都是真值,则为最后一个操作数,而
X or Y or Z or ...
return是第一个真操作数,如果它们都是假的,则为最后一个操作数。
上面的 link 解释了什么是真假。对象总是真实的,所以
T and T.left
将始终 return T.left
因为 T
永远不会是第一个假操作数。反之
T or T.left
将始终 return T
因为它是第一个真值操作数。
T.left and T.right
returns T.right
因为 T.left
不是假的。
您必须从根本上理解真值测试和布尔运算符。
https://docs.python.org/3.6/library/stdtypes.html
请注意,or
运算符 returns 是两个参数之一:
x or y
If x is false, then y, else x
这是一个常用于检查是否为假的成语,通常是 None
或一个空容器。
例如如果 x 不是 None
,则使用 x
否则使用其他东西...所以一个快捷方式:
if not T:
ans = T.left
else:
ans = T
我更喜欢完整的 if-else,或者如果您想要可以放在一行中的内容,请使用 conditional expression
ans = T.left if not T else T
或
ans = T if T else T.left
and 运算符也是 returns 它的参数之一:
x and y
if x is false, then x, else y
if not T:
ans = T
else:
ans = T.left
我浏览了一些 Python 笔记,我看到了这个示例及其工作发现,但我试图了解正在发生的事情。
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
T= TreeNode(5)
T.left = TreeNode(2)
T.right = TreeNode(7)
ans = T and T.left #===> This returns T.left, <--------- how?
ans2 = T or T.left #===> This returns T . <-------------?
ans3 = T.left and T.right #====> T.right <----- mind blows away :(, how , how ??
and/or 运算符在这里如何工作?我尝试查找 google,但它只向我展示了基本的 and/or 内容 :(.
and
和 or
运算符处理其操作数的 truthiness。所以
X and Y and Z and ...
return是第一个假操作数,如果它们都是真值,则为最后一个操作数,而
X or Y or Z or ...
return是第一个真操作数,如果它们都是假的,则为最后一个操作数。
上面的 link 解释了什么是真假。对象总是真实的,所以
T and T.left
将始终 return T.left
因为 T
永远不会是第一个假操作数。反之
T or T.left
将始终 return T
因为它是第一个真值操作数。
T.left and T.right
returns T.right
因为 T.left
不是假的。
您必须从根本上理解真值测试和布尔运算符。
https://docs.python.org/3.6/library/stdtypes.html
请注意,or
运算符 returns 是两个参数之一:
x or y
If x is false, then y, else x
这是一个常用于检查是否为假的成语,通常是 None
或一个空容器。
例如如果 x 不是 None
,则使用 x
否则使用其他东西...所以一个快捷方式:
if not T:
ans = T.left
else:
ans = T
我更喜欢完整的 if-else,或者如果您想要可以放在一行中的内容,请使用 conditional expression
ans = T.left if not T else T
或
ans = T if T else T.left
and 运算符也是 returns 它的参数之一:
x and y
if x is false, then x, else y
if not T:
ans = T
else:
ans = T.left