Если я хотел проверить несколько условий, не могу ли я просто использовать несколько операторов if? Например:Какова функция elif?
a = 10
b = 20
if a == b:
print('equal')
if a < b:
print('less')
if a > b:
print('greater')
Если я хотел проверить несколько условий, не могу ли я просто использовать несколько операторов if? Например:Какова функция elif?
a = 10
b = 20
if a == b:
print('equal')
if a < b:
print('less')
if a > b:
print('greater')
Использование мультипликатора, если заявления будут оценивать каждый 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
не будет работать, используя свой пример.
Согласно [официальному учебнику Python] (https://docs.python.org/3.4/tutorial), будет выполнен только один блок структуры 'if..elif..else'. Ваша текущая конструкция 'if..if..if' будет оценивать все возможности и выполнять любые истинные. – TigerhawkT3
Это особенно полезно, когда некоторые из условных выражений требуют времени для выполнения или не обязательно являются взаимоисключающими (но вы все еще только хотите, чтобы это произошло). – jonrsharpe
Да, вы можете. Однако это не так эффективно ... Сказав это, иногда меня сразу не интересует скорость и использует ряд утверждений 'if' (так же, как вы показали), в то время как я разрабатываю, что было бы лучшим решением для потому что вы можете просто вырезать и вставлять оператор 'if', тогда как' elif' требует немного больше усилий для перемещения. – Dan