Python,条件 - 这些是等价的吗?

时间:2011-02-09 23:53:22

标签: python conditional-statements

if config == 'H/2' or 'H' or '2H': pass
if config == 'H/2' or config == 'H' or config == '2H': pass

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

好吧,因为pass什么也没做,大概config.__eq__没有副作用,我认为它们是等价的(因为没有任何反应)。

如果用其他东西替换pass,你会注意到第一个条件总是执行而第二个条件取决于config的值。

也许你想写

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

答案 2 :(得分: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()