Bezdepbonusu7Программирование: статьи и ответы

Вопрос

For-else vs for elif

Автор вопроса: Viktor MellgrenОтветов: 4

я думал, что elif: это сокращение от

else:
     if:

но невозможно использовать

для - элиф:

Только

для - иначе: если:

в этом коде:

for line in source:
    change_next = False
    for dataset,artnr,revision in datasets:
        if dataset in line:
            change_next = True
            print "  **  " + dataset + " found"
            datasets.remove((dataset,artnr,revision))
            break
    else:
        if line.startswith("DstID:"):
            print line.replace("DstID:","").rstrip()

    if change_next and "Partno:" in line:
        destination.write("Partno: " + artnr + "\n")
        print "Partno: " + artnr
    elif change_next and "Revno:" in line:
        destination.write("Revno:" + revision + "\n")
        print "Revno:" + revision
    else:
        destination.write(line)

Спасибо за ответ до сих пор, мой вопрос сейчас скорее: это способ сделать это? если в строке нет (из известных) наборов данных, то я хочу напечатать ее, если это набор данных?

  • Я программирую на Python около 7 лет и никогда не знал о предложении else в выражении for... Andrew Jaffe 11.06.2012
  • @AndrewJaffe: Это понятно. Это не особенно полезно. Я думаю, что было всего несколько раз, когда я использовал его. Joel Cornett 11.06.2012
  • @JoelCornett Я использую его все время. becko 27.09.2017

pythonif-statementfor-loop

Ответы

Ответ 1 · рейтинг 13 · kindall

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

Ответ 2 · рейтинг 10 · Silas Ray

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

Ответ 3 · рейтинг 9 · ecatmur

Правильный. То же самое касается else в try .. except .. else.

Ответ 4 · рейтинг 5 · uselpa

"Еще", на которое вы ссылаетесь, привязано к команде "для", а не к команде "если". "elif" имеет смысл только при использовании с командой "if".

При использовании команды for блок else выполняется только в том случае, если блок for не был преждевременно завершен командой break, см. параграф 4.4.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы