2011-02-09 73 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()