Выход из функции на основе возвращаемого параметра другой функции? - PullRequest
2 голосов
/ 28 февраля 2020

Я пытаюсь понять логику c этого кода ниже. Может ли кто-нибудь помочь мне ответить на следующие вопросы?

1) Продолжает ли выполнение for l oop из-за возврата check_cheese в значение False? Насколько я знаю, либо результат True, либо False, команда return останавливает выполнение функции.

2) Оператор if check_cheese(cheese) возвращает переменную cheese только в том случае, если возвращаемый параметр функции check_cheese() равен True? Я немного сбит с толку, потому что здесь нет проверки типа == или in или любого другого утверждения, которое указывает на возврат сыра, только если условие True.

3) Что было бы случай, если Гауда не существует в списке? Будет ли это так, как если бы каждое условие в for l oop возвращало False, а в конце оператора print вы называете себя будет выполнено до завершения?

Спасибо в заранее за любую помощь, которую вы можете предоставить.

def check_cheese(cheese):

    if cheese == "Gouda":
        print("ooh we have that one")
        return True
    print(f"we don't have any {cheese}")
    return False

def find_first_available_cheese():

    for cheese in ['Emmental','Gouda']:
        if check_cheese(cheese):
            return cheese
    print("and you call yourself a cheeseshop!")

find_first_available_cheese()

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

1) Продолжает ли выполнение For l oop из-за возврата check_cheese False? Насколько я знаю, либо результатом является Истина или Ложь, команда возврата останавливает выполнение функции

Если вы вернетесь внутрь оператора if, он оторвется от функции.

2) Оператор "if check_cheese (cheese)" возвращает переменную cheese только в том случае, если возвращаемый параметр функции check_cheese () равен True? Я немного сбит с толку, потому что здесь нет проверки типа "==" или "in" или любого другого оператора, который указывает на возврат сыра, только если условие истинно.

Для для l oop работает до тех пор, пока не найдет сыр Гауда, как указано в функции check_cheese.

3) Что будет, если Гауда отсутствует в списке? Будет ли это так, как если бы каждое условие в for l oop вернуло False, и в конце выписать инструкцию «Вы называете себя» до завершения?

Вы получили бы распечатку " А ты называешь себя магазином сыров! ». Пытаться. :)

0 голосов
/ 28 февраля 2020
  1. Вызов оператора return всегда нарушает внешнюю функцию l oop /, даже если она return False. В вашем случае условие if не позволяет вызвать оператор return
  2. Ваша функция check_cheese никогда не возвращает переменную cheese, только логические значения
  3. Почему бы вам пытаться? ;)
...