a=set(["a"])
b=set(["b"])
c=a&b
將返回一個空集,c=set([])
但是當我鍵入c = a and b
,爲什麼它給我一個set(["b"])
什麼是「and
」和「or
」在兩套中使用?
a=set(["a"])
b=set(["b"])
c=a&b
將返回一個空集,c=set([])
但是當我鍵入c = a and b
,爲什麼它給我一個set(["b"])
什麼是「and
」和「or
」在兩套中使用?
有幾件事。
a = {"a"}
。and
和or
是邏輯運算符。它們用於Python的條件邏輯。 |
和&
運算符是按位進行的;它們由set()
類超載。你應該做的是a & b
。你可以在這裏閱讀更多:http://docs.python.org/2/library/sets.html#set-objects如果試圖a = 5 and 6
你會看到的結果是6
。這就是布爾運算符在很多編程語言中的工作原理,包括Python。它基本上是說「檢查左側的值是否爲True
,如果是,則返回右側的值。」
a and b
正在返回b
。這是布爾邏輯,而不是一組交集。在Python,以下是 「falsy」 對象:None
,False
,0
,""
,[]
,tuple()
,set([])
等。由於a
和b
均爲 「truthy」 對象,b
從a and b
返回。
http://docs.python.org/2/tutorial/datastructures.html#more-on-conditions
一種用途,這是初始化變量是這樣的:
def f(x):
x = x or MyObject()
c=a&b
返回兩個集合,在這種情況下是沒有什麼的交集。 c=a and b
使用標準的Python邏輯運算符。所以當你說c=a and b
你基本上說c =(a是真)和(b是真)。天真地,因爲在這種情況下a和b都不是空的並且評估爲真,所以你會期望c爲真。但是,當您使用邏輯運算符設置值時,Python不僅返回True,而且返回最後一個True對象的值,在本例中爲b。
關於or
和and
的答案在這裏有點不足。不錯,它們是布爾運算符,與集合無關。它們是短路布爾運算符,並且通常用作爲後備值賦值的捷徑。
下面是它如何工作?
如果你有一個聲明說a or b
,你必須評估如果整個聲明是真實的,你最好先搞清楚,如果a
是真的開始。如果您發現a
爲爲真,那麼您無需費心評估b
,因爲對任何事情的真實指示總是如此。另一方面,如果a
爲假,則必須評估b
以確定整個陳述是否爲假。此外,不管b
是整個a or b
聲明的結果。
因此,x = a or b
將首先測試如果a
爲真,並且如果它是整個右側的語句將成爲a
。同樣,如果a
爲假,則整個右側將變爲b
,因爲b
將確定a or b
是否爲真,因爲我們知道a
爲假。
and
也是一個短路操作員。如果a and b
,如果a
是錯誤的,我們可以停止評估,並說整個陳述是錯誤的,並忽略b
。如果a
爲真,則整個語句依賴於布爾值b
。
因此,x = a and b
將首先測試a
是否爲真。如果a
爲真,那麼a and b
的結果可簡化爲b
,然後語句變爲x = b
。如果a
是錯誤的,那麼我們可以停止在a
,只需用a
代替a and b
使其成爲x = a
即可。
我不認爲我曾見過這種方式使用and
,但它確實有效。