【发布时间】:2021-08-27 06:26:41
【问题描述】:
我正在尝试更好地理解 python,但由于某种原因,缺少括号可能会有点令人困惑。
如何评估(not a < b < c)?是(not a) < b < c吗?或not (a < b < c)?
根据reference manual,not 的优先级是否低于或高于<?我假设具有较高优先级的运算符先于具有较低优先级的运算符进行评估,对吗?我觉得我现在需要有人来打破袜子木偶。
根据Python 2.4 reference manual not 和比较有不同的优先级。那么在Python 2.7 reference manual中不和比较具有相同的优先级。
如果我没记错的话not a < b < c 会根据 python 的版本产生不同的结果。有人可以分享一下这个陈述是如何评估的吗?
我坚持not (a < b < c)
【问题讨论】:
-
在需要特定评估顺序的地方添加括号。阅读您的代码的人会更乐意避免检查文档
-
理解该代码比运算符优先级要多。注意
a < b < c与(a < b) and (a < c) and (b < c)不同,原因有两个——您可以重载比较,因此它们不一定是可交换的,并且链式比较扩展为(a < b) and (b < c);它与a和c无关。 -
我发现
dis和ast模块对解决此类问题很有帮助,例如dis.dis(lambda a,b,c: not a < b < c)和print(ast.dump(ast.parse('not a < b < c')))。无需与编译器争论。 -
@eryksun 只有在你能理解编译器的情况下才有帮助...... :)
-
agf,我没想到 a
标签: python