2015-06-18 10 views
0

Если я хотел проверить несколько условий, не могу ли я просто использовать несколько операторов if? Например:Какова функция elif?

a = 10 
b = 20 
if a == b: 
    print('equal') 
if a < b: 
    print('less') 
if a > b: 
    print('greater') 
+1

Согласно [официальному учебнику Python] (https://docs.python.org/3.4/tutorial), будет выполнен только один блок структуры 'if..elif..else'. Ваша текущая конструкция 'if..if..if' будет оценивать все возможности и выполнять любые истинные. – TigerhawkT3

+1

Это особенно полезно, когда некоторые из условных выражений требуют времени для выполнения или не обязательно являются взаимоисключающими (но вы все еще только хотите, чтобы это произошло). – jonrsharpe

+0

Да, вы можете. Однако это не так эффективно ... Сказав это, иногда меня сразу не интересует скорость и использует ряд утверждений 'if' (так же, как вы показали), в то время как я разрабатываю, что было бы лучшим решением для потому что вы можете просто вырезать и вставлять оператор 'if', тогда как' elif' требует немного больше усилий для перемещения. – Dan

ответ

4

Использование мультипликатора, если заявления будут оценивать каждый if для условия. Поскольку условия в вашем примере взаимно исключают друг друга, это может иметь аналогичный результат. Однако, если a или b изменения в промежутке между, другое условие может стать реальностью:

a = 5 
b = 7 
if a < b: 
    a = b 
if a == b: 
    b += 1 

Оба условия вычисляться Правда, и будет выполняться. Это может быть не предназначено, поэтому использование:

a = 5 
b = 7 
if a < b: 
    a = b 
elif a == b: 
    b += 1  

выполнит только первое условие.

Даже с взаимными эксклюзивными условиями в качестве вашего примера, поскольку каждое выражение должно быть оценено, это будет медленнее второго варианта.

Примечание elif (ака else if) идентичен:

if <cond1>: 
    pass 
else: 
    if <cond2>: 
     pass 
    else: 
     if <cond3>: 
      pass 

Как вы можете видеть, что очень быстро приводит к испытаниям выбежать из текста и гораздо менее читабельным, чем:

if <cond1>: 
    pass 
elif <cond2>: 
    pass 
... 

Это также более выразительно, так как читателю не нужно проверять условия взаимного эксклюзива. Семантика понятна с самого начала.


Наконец:

Что-то вроде:

i = 1 
if i is None: 
    k = 5 
elif not (i <= 0): 
    k = i 

не будет работать, используя свой пример.