回答
您的第一个结果归因于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,这就是结果。
- 1. 为什么-1 >> 1是-1?而1 >> 1是0!
- 2. 为什么返回-1而不是0?
- 3. 为什么1!= 1返回true?
- 4. 为什么getdate返回1 \ 1 \ 1900
- 5. 为什么1 && 2返回2?
- 6. Common Lisp为什么(列表+ 1 2)评估为('(+ 1 2)1 2)
- 7. 序言返回H = 0 + 1 + 1而不是H = 2
- 8. 为什么(1 <1 <1)在C++中返回true?
- 9. 为什么“1 | 2”== 1在PHP中返回true?
- 10. Python:`1 + 1j ==(1 + 1j)`但是`1 + 1j.imag == 2`,为什么?
- 11. 为什么retainCount返回-1
- 12. 为什么IndexOf返回-1?
- 13. 为什么HttpURLConnection.getResponseCode()返回1?
- 14. 为什么GetCurrentProcess返回-1?
- 15. SDL_BlitSurface()返回-1 ...为什么?
- 16. 为什么[] .push([])返回1?
- 17. 为什么sqlitedatabase.insert返回-1?
- 18. 为什么UINT_MAX返回-1?
- 19. 为什么是1 -2
- 20. 为什么typeof运算1 === 1返回错误,而不是布尔
- 21. 为什么1 :: 2 :: []和[1; 2]在OCaml中的==不一样?
- 22. 返回1 + 1/2 + 1/3 + ... + 1/n的系列
- 23. getyx返回-1 -1
- 24. UIDatePicker默认日期为1/1/1970返回为1/1/1969
- 25. 为什么(INT)@ “ - 1” 的floatValue]不返回-1
- 26. (-1 >> 1)== -1 - 为什么?
- 27. 为什么scanf总是返回1?
- 28. 为什么getPointerCount()总是返回1?
- 29. 为什么SRV res_query总是返回-1?
- 30. 为什么[NSOutlineView clickedRow]总是返回-1?
请给出一个具体的做法,发生这种情况 – We0
http:// cs61a。org/lab/lab01/ –
要求人们为你做功课不是很酷 –