布爾運算符有個有趣的特性:只有在需要求值時才進行求值。舉例來說,表達式x and y需要兩個變量都為真時才為真,所以如果x為假,表達式就會立刻返回false,而不管y的值(事實上各個語言都有這個特性)。實際上,如果x為假,表達式會返回x得值----否則它就返回y的值。這種行為被稱為短路邏輯(short-circuit logic)或惰性求值(lazy evaluaion):布爾運算符通常被稱為邏輯運算符,就像你看到的那樣第2個值有時“被短路了”。這種行為對於or來說也同樣適用。在表達式x or y中,x為真時,它直接返回x的值,否則返回y值。注意,這意味着在布爾運算符之后的所有代碼都不會執行。
這有什么用呢?它主要是避免了無用地執行代碼,可以作為一種技巧使用,假設用戶應該輸入他/她的名字,但也可以選擇什么都不輸入,這時可以使用默認值‘<unknown>’。可以使用if語句,但是可以很簡潔的方式:
name = raw_input('Please enter your name: ') or '<unknown>'
換句話說,如果raw_input語句的返回值為真(不是空字符串),那么它的值就會賦給name,否則將默認的'<unknown>'賦值給name。
這類短路邏輯可以用來實現C和Java中所謂的三元運算符(或條件運算符)。Python2.5中有一個內置的條件表達式,像下面這樣:
a if b else c
如果b為真,返回a,否則,返回c。(注意,這個運算符不用引用臨時變量,就可以直接使用,從而得到與raw_input例子中同樣的結果。)