語句在Python中不表示爲對象(包括您提供的示例)。相反,事情的工作方式是語言語法經常映射到「鉤子」,您可以定義它來影響語法在特定情況下的功能。例如,<
語法映射到__lt__
掛鉤。這並不意味着<
符號「是一個對象」;它只是意味着您可以在對象上定義方法來定製它們如何使用該語法。
您詢問的一些語法可以通過魔術方法以類似的方式受到影響。
if
檢查其條件是否爲布爾值真。即,if x:
內部呼叫bool(x)
以確定x
「計數」爲真還是假。您可以通過定義__nonzero__
方法(或Python 3中的__bool__
)來影響此決定。 elif
的工作方式相同。 (您不能更改else
所做的操作。)另外,當然,很多if
條件涉及比較,您可以按照您已提及的方式自定義這些比較。例如,如果你想自定義if myObject < 2
的工作方式,你可以編寫一個神奇的方法__lt__
。
for
從事iterator protocol。您可以通過定義__iter__
和/或next
方法來使自己的對象可迭代。您不能完全影響break
和continue
,但您可以通過跳過元素來編寫「假」繼續的迭代器,或者通過提高StopIteration
來編寫「假」繼續。
lambda
只是用於定義函數的另一種語法。您無法更改lambda
的功能,但不清楚這點到底會是什麼。
pass
是一個無所事事的聲明。你不能改變它的作用,而且確實沒有意義:它無處不在。
BrenBarn我寫錯了我的問題,我現在編輯。我還沒有閱讀你的答案): – overexchange
Bren你可以編輯你的答案---'但這兩個例子都不是你提到的。相反,在Python中工作的方式是語言語法經常映射到您可以定義的「鉤子」 - 在我編輯我的問題後,這對我來說看起來不太合適,對於不便,我很抱歉 – overexchange
@Sham:我沒有看到你的編輯改變了你的問題的實質。你是說我的回答不正確或不回答這個問題嗎?我不明白你在評論中的意思。 – BrenBarn