Я знаю такие языки, как C, C ++, Java и C #, (пример C # <) оператор else if
является синтаксическим сахаром, поскольку в действительности это просто один оператор else
, за которым следует оператор if
.
else if (conition(s)) { ...
Равно
else {
if (condition(s)) { ...
}
Однако в python есть специальное выражение elif
. Мне было интересно, является ли это просто сокращением для разработчиков или есть ли какая-то скрытая оптимизация, которую Python может сделать из-за этого, например, интерпретировать быстрее? Но это не имеет смысла для меня, так как другие языки будут делать то же самое (например, JavaScript). Итак, мой вопрос в том, что в python оператор elif
является просто условным обозначением для разработчиков, или есть что-то скрытое, что он получает от этого?
4 ответа
Если вы действительно хотите узнать, что происходит за кулисами в интерпретаторе, вы можете использовать модуль dis
. В таком случае:
>>> def f1():
... if a:
... b = 1
... elif aa:
... b = 2
...
>>> def f2():
... if a:
... b = 1
... else:
... if aa:
... b = 2
...
>>> dis.dis(f1)
2 0 LOAD_GLOBAL 0 (a)
3 POP_JUMP_IF_FALSE 15
3 6 LOAD_CONST 1 (1)
9 STORE_FAST 0 (b)
12 JUMP_FORWARD 15 (to 30)
4 >> 15 LOAD_GLOBAL 1 (aa)
18 POP_JUMP_IF_FALSE 30
5 21 LOAD_CONST 2 (2)
24 STORE_FAST 0 (b)
27 JUMP_FORWARD 0 (to 30)
>> 30 LOAD_CONST 0 (None)
33 RETURN_VALUE
>>> dis.dis(f2)
2 0 LOAD_GLOBAL 0 (a)
3 POP_JUMP_IF_FALSE 15
3 6 LOAD_CONST 1 (1)
9 STORE_FAST 0 (b)
12 JUMP_FORWARD 15 (to 30)
5 >> 15 LOAD_GLOBAL 1 (aa)
18 POP_JUMP_IF_FALSE 30
6 21 LOAD_CONST 2 (2)
24 STORE_FAST 0 (b)
27 JUMP_FORWARD 0 (to 30)
>> 30 LOAD_CONST 0 (None)
33 RETURN_VALUE
Похоже, что наши две функции используют один и тот же байт-код - так что, очевидно, они эквивалентны.
Осторожно, байт-код - это деталь реализации CPython. Нельзя сказать, что все реализации Python делают одно и то же за кулисами. Все, что имеет значение, - это то, что они ведут себя одинаково. Работая с логикой, вы можете убедить себя, что f1
и f2
должны делать одно и то же независимо от того, рассматривает ли базовая реализация это как «синтетический сахар» или происходит что-то более сложное.
Все три следующих фрагмента кода будут выполняться с использованием одной и той же логики, однако все они используют разный синтаксис.
elif condition: ...
else if conition { ...
else {
if conition { ...
}
elif
в Python - это просто синтаксический сахар для общего выражения else if
elif
в Python является синтаксическим сахаром для else if
, встречающимся во многих других языках. Это все.
Ключевое слово «elif» является сокращением от «else if» и полезно, чтобы избежать чрезмерного отступа. Источник
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].