2010-01-06 88 views

回答

40

因爲它們是控制流構造。具體做法是:

  • 如果左邊的參數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的原因。

+12

注意,在C中,'&&'和'||'被稱爲「操作符」,即使它們是短路的(根據左邊的值不要評估右邊)。對其他一些語言也是如此。 – 2010-01-07 04:00:38

+1

是的,我同意這個術語可以改變。但主要的一點是,它們與Python通常所稱的操作符有着根本不同的特徵。 – 2010-01-07 15:54:03

0

他們在文檔的早期將它們分類爲關鍵字。

+3

確實如此,但這並不意味着它們不能用作變量名稱。 – 2010-01-06 23:55:33

+0

OP鏈接的URL與詞法分析有關,在詞法上,它們是關鍵字,而不是操作符。如果問題被解釋爲語法之一,那麼投票就會有意義。 – Jacob 2010-01-07 00:23:41

0

它們是keywords,因爲它們是保留的標識符,而不是特殊的符號標記。

0

它們不能被重新定義爲支持類型特定的操作,所以它們不屬於其他操作符的範圍。

+2

我懷疑你的因果是錯誤的。它們不能被重新定義爲支持類型特定的操作,因爲它們不是操作符。 – 2010-01-07 00:03:10

6

Python不目前提供對應於「和」任何「XXX」特殊的方法,「或」和「不」布爾運算符。在'和'和'or'的情況下,最可能的原因是這些操作符具有短路語義,即如果可以從第一操作數確定結果,則不評估第二操作數。爲這些運營商提供特殊方法的通常技術因此不起作用。

來源:PEP 335

PEP約增加有重載操作能力335次會談,並討論這個問題有點。

相關問題