2014-10-28 82 views
3

嗨,有人可以闡明在Python中工作「in」運算符的機制。(a不在b)與(不在b中)之間的區別。 Python

現在我處理的例子如下:

print ('a' not in ['a', 'b']) # outputs False 
print (not 'a' in ['a', 'b']) # outputs False -- how ??? 

print ('c' not in ['a', 'b']) # outputs True 
print (not 'c' in ['a', 'b']) # outputs True 


print (not 'a') # outputs False 
# ok is so then... 
print (not 'a' in ['b', False]) # outputs True --- why ??? 

我現在在奇怪怎麼可以如此。如果有人知道,請分享你的知識。 謝謝=)

+4

'不在'和'不在'等於 – 2014-10-28 16:54:34

+1

請注意,python styleguide說你應該使用'不在',即使他們這樣做。 – 2014-10-28 16:58:21

+0

你可以在['b',False]中很容易地將它改成'(不是'a'),這會給你你顯然期望的答案(因爲parens總是表示更高的優先級) – 2014-10-28 17:00:21

回答

8

in has higher precedence than not。因此,執行遏制檢查,如果需要,結果將被否定。 'a'不在['b', False]中,並且由此產生的False被否定爲導致True

2

not關鍵字基本上「倒退」在這裏返回的布爾值。

對於第一個例子,a在數組中,所以這是真的,但not true是錯誤的。太假了。

對於第二個示例,a不在數組中,所以這是錯誤的,但not false爲真。如此真實。

0

print (not 'a' in ['a', 'b'])

休息下來是這樣的:

not 'a'本身的計算結果爲False(因爲任何事情都視爲True除了0,無,假,空列表,空字典)

false不在['a','b']所以 False in ['a','b']評估爲False

並在最後一個not 'a'計算結果爲False所以False in ['b', False]計算爲True

相關問題