Python: цикл for if-else, как / почему это работает? - PullRequest
5 голосов
/ 11 августа 2011

В настоящее время я прохожу учебник по Lynda Python и в разделе о генераторах вижу следующий код:

def isprime(n):
    if n == 1:
        return False
    for x in range(2, n):
        if n % x == 0:
            return False
    else:
        return True

Сначала я его не уловил, но, просматривая код, я заметил, что ключевое слово else содержит полный цикл for и if на одном уровне отступа. К моему удивлению, код не только работает, но и выдает правильное поведение.

Если бы я заменил цикл for простым оператором print("Hello, World"), только тогда я получу ожидаемую ошибку интерпретатора.

Что послужило причиной этого синтаксиса и почему он работает с операторами цикла, но не с другими, такими как print()?

Для справки, я бы ожидал, что код будет написан следующим образом:

def isprime(n):
    if n == 1:
        return False     
    for x in range(2, n):
        if n % x == 0:
            return False
    return True

Ответы [ 2 ]

8 голосов
/ 11 августа 2011

Блок else: после блока for: выполняется только в том случае, если цикл завершен нормально.Если вы break вышли из цикла, он не запустится.В этом случае это не имеет значения, потому что вы никогда не выходите из цикла;вы return до того, как он закончится, или вы дадите ему нормально завершиться.

2 голосов
/ 11 августа 2011

Причина такого поведения заключается в том, что в python for loop на самом деле может следовать оператор else. Остальная ветвь выполняется в случае обычного окончания цикла и пропускается после обрыва .

...