Как операторы return работают внутри функции? Могу ли я использовать несколько операторов возврата? - PullRequest
2 голосов
/ 26 октября 2019

Следующий код возвращает «True».

check = [1,2,4,6]

def is_consecutive(a_list):
    """Checks to see if the numbers in a list are consecutive"""
    total = 2
    while total > 1:
        test = a_list.pop(0)
        if test == a_list[0] - 1:
            total = len(a_list)
            return True
        else:
            return False
            break

works = is_consecutive(check)
print(works)

Я нашел решение, переместив return True в новый блок после цикла while:

check = [1,2,4,6]

def is_consecutive(a_list):
    """Checks to see if the numbers in a list are consecutive"""
    total = 2
    while total > 1:
        test = a_list.pop(0)
        if test == a_list[0] - 1:
            total = len(a_list)
        else:
            return False
            break
    return True

works = is_consecutive(check2)
print(works)

Я надеваюЯ не совсем понимаю, почему перемещение этого фрагмента кода вне цикла while работает правильно. Мне кажется, что когда вы говорите функции, возвращающей True, это не может быть изменено позже в функции. Это правильно?

Ответы [ 3 ]

0 голосов
/ 26 октября 2019

это потому, что в новом коде вы пытаетесь найти условие, при котором вы получите номер в списке, непоследовательный. если вы найдете какое-либо число, вы сразу же вернете false.

и, пройдя по списку и не найдя последовательных чисел, оно берется как список из последовательных чисел и, следовательно, возвращает True

0 голосов
/ 26 октября 2019

Оператор возврата останавливает выполнение этой конкретной функции. И да, вы можете использовать несколько операторов return, но только внутри условных блоков. Потому что, когда вызывается оператор return, он останавливает выполнение этой функции, поэтому он не сможет перейти к строкам / блоку после оператора return.

0 голосов
/ 26 октября 2019

Да, когда вы делаете return True, вы с этого момента «выходите» из функции, т.е. больше ничего в функции не будет выполнено. Перемещая return True за пределы цикла while и в конец функции, он гарантирует, что функция никогда не вернет False, если список является последовательным, и, следовательно, должен вернуть True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...