我還沒有意識到這一點,但顯然and
和or
關鍵字不是運營商。它們不出現在list of python operators中。出於純粹的好奇心,這是爲什麼?如果他們不是經營者,他們究竟是什麼?Python中爲什麼不是「和」和「或」運算符?
回答
因爲它們是控制流構造。具體做法是:
- 如果左邊的參數
and
計算爲False,正確的說法沒有得到根本 - 如果左邊的參數
or
計算結果爲真,也右邊的參數沒有得到在評估全部
因此,它不是簡單的被保留字的問題。他們的行爲不像操作員,因爲操作員總是評估他們的所有論點。
>>> 1 | (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> 1 or (1/0)
1
正如你看到的,按位OR(|
)會評估它的參數:
可以按位二元運算符,正如其名稱所暗示,是運營商對比這一點。但是,or
關鍵字在左參數計算爲True時根本不會評估其正確參數;這就是爲什麼在第二個陳述中沒有提出ZeroDivisionError
的原因。
他們在文檔的早期將它們分類爲關鍵字。
確實如此,但這並不意味着它們不能用作變量名稱。 – 2010-01-06 23:55:33
OP鏈接的URL與詞法分析有關,在詞法上,它們是關鍵字,而不是操作符。如果問題被解釋爲語法之一,那麼投票就會有意義。 – Jacob 2010-01-07 00:23:41
它們是keywords,因爲它們是保留的標識符,而不是特殊的符號標記。
它們不能被重新定義爲支持類型特定的操作,所以它們不屬於其他操作符的範圍。
我懷疑你的因果是錯誤的。它們不能被重新定義爲支持類型特定的操作,因爲它們不是操作符。 – 2010-01-07 00:03:10
Python不目前提供對應於「和」任何「XXX」特殊的方法,「或」和「不」布爾運算符。在'和'和'or'的情況下,最可能的原因是這些操作符具有短路語義,即如果可以從第一操作數確定結果,則不評估第二操作數。爲這些運營商提供特殊方法的通常技術因此不起作用。
來源:PEP 335
PEP約增加有重載操作能力335次會談,並討論這個問題有點。
- 1. python中的%運算符是什麼?
- 2. 在Python中,「〜〜」運算符是什麼?
- 3. 爲什麼要在Python中結合np.floor函數和//運算符?
- 4. '&='和'=&'運算符是做什麼的?
- 5. //和||是什麼?運算符在Perl中做什麼?
- 6. SQL中的IN運算符和=運算符有什麼區別?
- 7. 符合:Deref和mark運算符,爲什麼它們不一樣?
- 8. 爲什麼Python **運算符在數組和標量上行爲不同
- 9. 在Ruby中,「和」,「或」運算符有什麼智慧嗎?
- 10. python中的/和//運算符有什麼區別?
- 11. 邏輯運算符:是和優於或?
- 12. 爲什麼PHP有兩個「不等於」運算符(=和<>!)
- 13. 運算符+ =重載,爲什麼是const?
- 14. 什麼是Java「= +」運算符?
- 15. 什麼是「===」運算符?
- 16. 什麼是()=>運算符?
- 17. C++ - 什麼是運算符。*?
- 18. 算術運算符^和。^之間的區別是什麼?
- 19. 爲什麼Ruby和Python的數學計算是不同的
- 20. Java中Bitwise和Bitshift運算符的功能是什麼?
- 21. 圓括號對Python中的'或'運算符有什麼影響?
- 22. 爲什麼<< instream中的運算符不是const?
- 23. 爲什麼不是運算符類型在java中安全的?
- 24. 爲什麼複製構造函數和賦值運算符是不允許的?
- 25. 運算符模塊中`in`的等效運算符是什麼?
- 26. PHP中的「和」和「&&」運算符有什麼區別嗎?
- 27. 爲什麼typeof被稱爲運算符而不是函數?
- 28. 在Python中,boolean'和','或'的操作符方法是什麼?
- 29. 什麼是HTML中的「:」運算符?
- 30. Ruby中的「=〜」運算符是什麼?
注意,在C中,'&&'和'||'被稱爲「操作符」,即使它們是短路的(根據左邊的值不要評估右邊)。對其他一些語言也是如此。 – 2010-01-07 04:00:38
是的,我同意這個術語可以改變。但主要的一點是,它們與Python通常所稱的操作符有着根本不同的特徵。 – 2010-01-07 15:54:03