2011-02-09 34 views
1
if config == 'H/2' or 'H' or '2H': pass 
if config == 'H/2' or config == 'H' or config == '2H': pass 
+7

號爲什麼問?你嘗試過嗎? – 2011-02-09 23:54:16

+0

我試過了,它們看起來相當。它讓我感到驚訝。也許我的測試不夠徹底。 – thenickname 2011-02-09 23:55:08

回答

8
>>> config = 'H/2' 
>>> config == 'H/2' or 'H' or '2H' 
True 
>>> config == 'H/2' or config == 'H' or config == '2H' 
True 

>>> config = 'H' 
>>> config == 'H/2' or 'H' or '2H' 
'H' 
>>> config == 'H/2' or config == 'H' or config == '2H' 
True 

>>> config = 'R' 
>>> config == 'H/2' or 'H' or '2H' 
'H' 
>>> config == 'H/2' or config == 'H' or config == '2H' 
False 
2

好吧,既然pass什麼也不做,想必config.__eq__有沒有副作用,我想他們是等效的(在什麼也沒有發生)。

但是,如果將pass替換爲別的東西,則會注意到第一個條件總是執行,第二個條件依賴於config的值。

也許你還想寫

if config in ['H/2', 'H', '2H']: 
    # do stuff 
    pass 
1

執行下列任:

if config in ('H/2', 'H', '2H'): # more efficient than a list 
    do_something() 

或者(如果你這樣做的時候還是可能的設定值要大的多):

# once 
config_h_set = set(('H/2', 'H', '2H')) 

# later 
if config in config_h_set: 
    do_something()