Python赋值命令语法

时间:2017-04-13 18:48:31

标签: python variable-assignment grammar

我正在阅读以下python代码片段,有些东西我不明白。 root是一个自定义的类,表示一个树节点。任何人都可以解释为什么root的赋值命令以这种方式工作?

   while (p.val - root.val) * (q.val - root.val) > 0:
        root = [root.left, root.right][p.val > root.val]

1 个答案:

答案 0 :(得分:6)

[root.left, root.right]是2个值的list

p.val > root.val是一个用作索引的布尔值:value可以是0或1。

因此,这是一种避免(明确)测试值的方法,只需根据01对结果进行索引(但测试仍在那里)

虽然它可能看起来是一个好主意,但Python中构造的效率是可疑的:它动态地构建一个列表然后通过索引访问它(带边界检查),更不用说它必须同时评估它们root.leftroot.right无论结果如何(无短路)。

我认为你最好使用下面的三元表达式:

root =  root.right if p.val > root.val else root.left

它是明确的,短路的,并且不会创建/访问临时列表。

相关问题