Skip to main content
 首页 » 编程设计

Python赋值命令语法

2025年05月04日1652php

我正在阅读以下 python 代码片段,但有些地方我不明白。 root 是一个自定义类,代表一个树节点。谁能解释为什么 root 的分配命令以这种方式工作?

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

请您参考如下方法:

[root.left, root.right] 是一个包含 2 个值的列表。

p.val > root.val 是用作索引的 bool 值:值可以是 0 或 1。

所以这是一种避免(明确地)测试值的方法,只需根据 0 或 1 索引结果(但测试仍然存在)

虽然这看起来是个好主意,但在 Python 中这种构造的效率值得怀疑:它动态构建一个列表,然后通过索引访问它(使用边界检查),更不用说它必须同时评估两者root.left 和 root.right 无论结果如何(无短路)。

我认为使用以下三元表达式会更好:

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

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