的or
和and
短路,請參閱Boolean operations文檔:
表達x and y
首先評估x
;如果x
爲假,則返回其值;否則,將評估y
並返回結果值。
表達式x or y
首先評估x
;如果x
爲真,則返回其值;否則,將評估y
並返回結果值。
注意如何,爲and
,y
是只有評估,如果評估x
的真正價值。相反,對於or
,y
僅在x
評估爲False值時才被評估。
對於第一個表達式True or blah
,這意味着blah
永遠不會被評估,因爲第一部分已經是True
。
此外,您的自定義Blah
類被認爲是真實的:
在布爾運算的情況下,以及當表達式通過控制流語句中,以下值解釋爲假:False
,None
,所有類型的數字零,空字符串和容器(包括字符串,元組,列表,字典,集合和frozensets)。所有其他值都被解釋爲true。 (換一種方式來改變這種見__nonzero__()
特殊的方法。)
由於類不實現__nonzero__()
方法(也沒有__len__
法),它儘可能的布爾表達式關注考慮True
。
在表達式blah or blah.notexist
中,blah
因此爲真,並且blah.notexist
從不被評估。
此功能是通過有經驗的開發相當定期和有效使用,最常指定默認值:
some_setting = user_supplied_value or 'default literal'
object_test = is_it_defined and is_it_defined.some_attribute
千萬要小心這些鏈接,並在適用情況下使用conditional expression代替。
的'等等或TRUE'一個不引發異常對我來說,它打印。 –
也許這是運氣? –
@TimS .:只有當你定義'blah' * first *。請注意,示例頂部的'blah' *尚未定義,所以會引發'NameError'。 –