2010-12-18 91 views
22

我在看一個2007 video on Advanced Python or Understanding Python,並在18'27" 說話的權利‘因爲有些人可能知道在Python andor返回這兩個值中的一個,而not總是返回一個布爾值。’當有這個據我所知,andor返回布爾值,也一直是這樣?Python和/或運營商的返回值

+0

什麼可能會讓你起牀是你可以在似乎需要布爾值的上下文中使用任何數據類型。 '如果17:blah'是合法的。 – 2010-12-18 15:07:08

回答

34

andor運營商做回自己的操作數,而不是一個純粹的布爾值,像TrueFalse

>>> 0 or 42 
42 
>>> 0 and 42 
0 

鑑於not總是返回一個純布爾值:

>>> not 0 
True 
>>> not 42 
False 
+0

你知道返回的操作數的順序是什麼嗎?首先到最後? – ash 2010-12-18 11:38:28

+8

決定結果的第一個值(從左到右)(即歪頭或錯誤)是結果。 – 2010-12-18 11:40:12

+0

確實返回其操作數之一。 ???邏輯不正確。請看我的答案。 – 2016-11-09 04:18:21

22

參見this表從標準庫參考在Python文檔:

Boolean Operations

+1

'假'部分有點混亂。它更像是等於假,或者用if來評估爲False – Adam 2016-09-08 14:56:51

13

Python docs

如果參數爲false,則運算符不會產生True,否則爲False。

表達式x和y首先計算x;如果x爲假,則返回其值;否則,評估y並返回結果值。

表達式x或y首先計算x;如果x爲真,則返回其值;否則,評估y並返回結果值。

Python的or運算符返回第一個Truth-y值或最後一個值,然後停止。這對於需要回退值的常見編程分配非常有用。

像這樣簡單的一個:

print my_list or "no values" 

這將打印my_list,如果有任何東西。否則,它將打印no values(如果列表爲空,或者它是None ...)。

一個簡單的例子:

>>> my_list = [] 
>>> print my_list or 'no values' 
no values 
>>> my_list.append(1) 
>>> print my_list or 'no values' 
[1] 

當你想要一個後衛,而不是後備使用and,返回第一個虛假的y值,或者最後一個值,並停止,恭維被使用。

贊一個:

my_list and my_list.pop() 

,因爲你不能使用list.popNone,或[],這是列出了常見的前值,這是非常有用的。

一個簡單的例子:

>>> my_list = None 
>>> print my_list and my_list.pop() 
None 
>>> my_list = [1] 
>>> print my_list and my_list.pop() 
1 

在被送回非布爾值這兩種情況下,並沒有異常曾引起。

0

需要給@Frédéric的答案增加一些觀點。

確實返回其操作數之一???

這是真的。但這不是這背後的邏輯。在python中,除0之外的數字被認爲是真,數字0被認爲是False。

(o和42-> False and True)= False。

這就是爲什麼它返回0

(0或42->或真或假)= 42

在這種情況下,說明會因爲操作數42也是如此。所以Python在這種情況下返回導致語句爲真的操作數。