为什么(1 + 1)和1返回1而不是2?
您的第一个结果归因于short-circuit evaluation。下面是Python的计算表达式:
减少
(1 + 1)
到2
。在布尔上下文中考虑
2
为"truthy"。评估并返回
and
的右侧操作数。
请注意,如果左操作数是“虚假”,它将立即返回,并且Python不会试图评估右手操作数。
顺便说一句,or
以类似的方式工作:它返回左手操作数,如果它是“truthy”,如果不是,则返回右操作数。
注意,在任何情况下做and
或or
以往自主决定返回True
或False
或任意数值转换为或True
或False
。它总是返回的两个操作数中的一个(除非程序崩溃 - 请参见下文),无论它们是否为bool
。
你的第二个结果只是一个除零误差。像大多数语言一样,Python将零除作为错误,因为实数的数学结果为undefined。只要Python试图评估1/0
,程序就会崩溃,一切都会停止 - Python从来没有机会看到右手操作数。
然而,上述因短路行为,下面的表达式:
True or 1/0
评估为True
即使1/0
会导致错误,因为Python从不试图同时评估右手操作所有在这种情况下。
但1/0或True返回错误根据上面的注释python应该给返回true,因为在1或者语句中,如果1/0计算结果为false,那么它应该返回true,但是返回错误 –
'1/0 ** **不计算为false。它不计算任何东西,因为它在字面上毫无意义,因此会引发'ZeroDivisionError'并在执行任何其他事情之前停止执行*。当试图评估某些事情会导致致命错误时,所有投注都将关闭。 –
认识到'1/0'不会“返回”错误是很重要的。它**是**错误,并导致程序崩溃。 –
Hard to argue与解释器/字节码:
In [1]: import dis
In [2]: dis.dis('(1+1) and 1')
1 0 LOAD_CONST 1 (2)
2 JUMP_IF_FALSE_OR_POP 6
4 LOAD_CONST 0 (1)
>> 6 RETURN_VALUE
首先,Python的预编译1+1
至2
然后,它说,“如果该值是一个falsey值,则跳转到图6(即,返回) ”。 2
显然不是错误的,所以它加载1,这就是结果。
请给出一个具体的做法,发生这种情况 – We0
http:// cs61a。org/lab/lab01/ –
要求人们为你做功课不是很酷 –