回答
您的第一個結果歸因於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. 爲什麼(true && 1)返回1,但(1 && true)返回true?
- 4. 爲什麼getdate返回1 \ 1 \ 1900
- 5. 爲什麼1!= 1返回true?
- 6. 爲什麼1 && 2返回2?
- 7. Common Lisp爲什麼(列表+ 1 2)評估爲('(+ 1 2)1 2)
- 8. 爲什麼這個數組返回1而不是2?
- 9. 序言返回H = 0 + 1 + 1而不是H = 2
- 10. 爲什麼(1 <1 <1)在C++中返回true?
- 11. 爲什麼「1 | 2」== 1在PHP中返回true?
- 12. Python:`1 + 1j ==(1 + 1j)`但是`1 + 1j.imag == 2`,爲什麼?
- 13. 爲什麼IndexOf返回-1?
- 14. 爲什麼ISNUMERIC('。')返回1?
- 15. 爲什麼UINT_MAX返回-1?
- 16. 爲什麼sqlitedatabase.insert返回-1?
- 17. 爲什麼[] .push([])返回1?
- 18. 爲什麼retainCount返回-1
- 19. 爲什麼GetCurrentProcess返回-1?
- 20. 爲什麼HttpURLConnection.getResponseCode()返回1?
- 21. SDL_BlitSurface()返回-1 ...爲什麼?
- 22. 爲什麼是1 -2
- 23. 爲什麼Python爲「True和1」表達式返回1?或假「假1」?
- 24. 爲什麼1 :: 2 :: []和[1; 2]在OCaml中的==不一樣?
- 25. 爲什麼typeof運算1 === 1返回錯誤,而不是布爾
- 26. 爲什麼strtotime(1970年1月1日)在PHP中返回-3600而不是0?
- 27. 爲什麼1%2等於1?
- 28. 返回1 + 1/2 + 1/3 + ... + 1/n的系列
- 29. getyx返回-1 -1
- 30. 爲什麼date_parse總是返回1月1日
請給出一個具體的做法,發生這種情況 – We0
http:// cs61a。org/lab/lab01/ –
要求人們爲你做功課不是很酷 –