Подтвердить что ты не робот

Разница между множеством if и elif's?

В питоне есть ли разница между скажем:

if text == 'sometext':
    print(text)
if text == 'nottext':
    print("notanytext")

а также

 if text == 'sometext':
        print(text)
 elif text == 'nottext':
        print("notanytext")

Просто интересно, если несколько, if может вызвать какие - либо нежелательные проблемы, и если это было бы лучше, рекомендуется использовать elif s.

4b9b3361

Ответ 1

Несколько, если это означает, что ваш код будет идти и проверять все условия if, где, как и в случае elif, если один из них удовлетворяет условию, он не будет проверять другие условия.

Ответ 2

Другой простой способ увидеть разницу между использованием if и elif - вот этот пример:

def analyzeAge( age ):
   if age < 21:
       print "You are a child"
   if age >= 21: #Greater than or equal to
       print "You are an adult"
   else:   #Handle all cases where 'age' is negative 
       print "The age must be a positive integer!"

analyzeAge( 18 )  #Calling the function
>You are a child
>The age must be a positive integer!

Здесь вы можете видеть, что когда 18 используется в качестве входных данных, ответ (удивительно) 2 предложения. Это не правильно. Это должно быть только первое предложение.

Это потому, что ОБА, если заявления оцениваются. Компьютер видит их как два отдельных утверждения:

  • Первый из них относится к 18 годам, поэтому напечатано "Вы - ребенок".
  • Второе утверждение if ложно и, следовательно, остальная часть Выполняется печать "Возраст должен быть положительным целым числом".

Elif исправляет это и делает два оператора if "слипшимися" как один:

def analyzeAge( age ):
   if age < 21:
       print "You are a child"
   elif age > 21:
       print "You are an adult"
   else:   #Handle all cases where 'age' is negative 
       print "The age must be a positive integer!"

analyzeAge( 18 )  #Calling the function
>You are a child

Изменение: исправлено написание

Ответ 3

def multipleif(text):
    if text == 'sometext':
        print(text)
    if text == 'nottext':
        print("notanytext")

def eliftest(text):
    if text == 'sometext':
        print(text)
    elif text == 'nottext':
        print("notanytext")

text = "sometext"

timeit multipleif(text)
100000 loops, best of 3: 5.22 us per loop

timeit eliftest(text)
100000 loops, best of 3: 5.13 us per loop

Вы можете видеть, что элиф немного быстрее. Это было бы более очевидно, если бы было больше ifs и больше elifs.

Ответ 4

Вот еще один способ задуматься над этим:

Скажем, у вас есть два конкретных условия, которые не могут быть достаточными:

Пример:

У меня есть 3 X 3 tic-tac-toe board, и я хочу напечатать координаты обеих диагоналей, а не остальных квадратов.

Tic-Tac-Toe Coordinate System

Я решил использовать и if/elif структуру вместо этого...

for row in range(3):
    for col in range(3):
        if row == col:
            print('diagonal1', '(%s, %s)' % (i, j))
        elif col == 2 - row:
            print('\t' * 6 + 'diagonal2', '(%s, %s)' % (i, j))

Вывод:

diagonal1 (0, 0)
                        diagonal2 (0, 2)
diagonal1 (1, 1)
                        diagonal2 (2, 0)
diagonal1 (2, 2)

Но подождите! Я хотел включить все три координаты диагонали2, поскольку (1, 1) также является частью диагонали 2.

"elif" вызвал зависимость от "if" , так что, если исходное "if" было выполнено, "elif" не будет инициироваться, даже если логика "elif" также удовлетворяет условию.

Вместо этого измените второй "elif" на "if" .

for row in range(3):
    for col in range(3):
        if row == col:
            print('diagonal1', '(%s, %s)' % (i, j))
        if col == 2 - row:
            print('\t' * 6 + 'diagonal2', '(%s, %s)' % (i, j))

Теперь я получаю вывод, который мне нужен, потому что два оператора if if являются взаимоисключающими.

diagonal1 (0, 0)
                        diagonal2 (0, 2)
diagonal1 (1, 1)
                        diagonal2 (1, 1)
                        diagonal2 (2, 0)
diagonal1 (2, 2)

В конечном счете, зная, какой вид или результат вы хотите достичь, определите, какой тип условных отношений/структуры вы кодируете.

Ответ 5

В вашем примере выше есть различия, потому что ваш второй код имеет отступ в elif, он будет фактически внутри блока if и в этом примере является синтаксически и логически неверным.

Python использует отступы строк для определения блоков кода (большинство C-подобных языков используют {}, чтобы заключить блок кода, но python использует отступы строк), поэтому, когда вы кодируете, вы должны серьезно относиться к отстукам.

ваш образец 1:

if text == 'sometext':
    print(text)
elif text == 'nottext':
    print("notanytext")

оба if и elif имеют одинаковые отступы, поэтому они связаны с одной и той же логикой. ваш второй пример:

if text == 'sometext':
    print(text)
    elif text == 'nottext':
        print("notanytext")

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

Ответ 6

elif - это просто модный способ выразить else: if

Множественные if выполняют несколько ветвей после тестирования, в то время как elifs взаимно исключают друг друга, исполняют одну ветвь после тестирования.

Возьмите user2333594 примеры

    def analyzeAge( age ):
       if age < 21:
           print "You are a child"
       elif age > 21:
           print "You are an adult"
       else:   #Handle all cases were 'age' is negative 
           print "The age must be a positive integer!"

можно перефразировать как:

    def analyzeAge( age ):
       if age < 21:
           print "You are a child"
       else:
             if age > 21:
                 print "You are an adult"
             else:   #Handle all cases were 'age' is negative 
                 print "The age must be a positive integer!"

Другой пример может быть:

def analyzeAge( age ):
       if age < 21:
           print "You are a child"
       else: pass #the if end
       if age > 21:
           print "You are an adult"
       else:   #Handle all cases were 'age' is negative 
           print "The age must be a positive integer!"

Ответ 7

Когда вы используете несколько if, ваш код будет возвращаться в каждый оператор if чтобы проверить, соответствует ли выражение вашему условию. Иногда бывают случаи отправки множества результатов для одного выражения, чего вы даже не ожидаете. Но использование elif завершает процесс, когда выражение подходит для любого вашего условия.

Ответ 8

Вот как я разбиваю операторы потока управления:


# if: unaffected by preceding control statements
def if_example():
    if True:
        print('hey')
    if True:
        print('hi')  # will execute *even* if previous statements execute

напечатает hey и hi


# elif: affected by preceding control statements
def elif_example():
    if False:
        print('hey')
    elif True:
        print('hi')  # will execute *only* if previous statement *do not*

напечатает hi только потому, что предыдущее утверждение оценивается как False


# else: affected by preceding control statements
def else_example():
    if False:
        print('hey')
    elif False:
        print('hi')
    else:
        print('hello')  # will execute *only* if *all* previous statements *do not*

напечатает hello потому что все предыдущие операторы не выполнились