我正在尝试减少and并获得奇怪的输出:

> [and] 2>1, 3>2, put 1, put 2
2
1True


同时,如果我在每个表达式之间放置and,则一切正常。

> 2>1 and 3>2 and put 1 and put 2
1
2


这种差异的原因是什么?

最佳答案

详细阐述霍肯的评论。区别在于优先。

这两个语句等效于以下内容:

> [and] (2>1), (3>2), (put 1,(put 2))
2
1True
> (2>1) and (3>2) and (put 1) and (put 2)
1
2


在第一种情况下,它首先计算put 2,打印2并返回True,然后是put 1,True,打印1True,返回True。整个表达式的计算结果为True,但不再打印任何内容。

在第二种情况下,put 1首先求值,打印1并返回True,然后put 2求值,打印2并返回True。同样,整个表达式的计算结果为True,但不再打印任何内容。

07-24 09:38
查看更多