Это довольно распространенная проблема для людей, чтобы работать в: , что это значит, когда моя функция имеет несколько возвращения точки?
Отказ от обсуждения whether or not несколько возвратов должно быть когда-либо случалось, факт в том, что они это делают. Важно помнить следующее:
Функция закончена, как только она возвращается.
На каждом современном языке программирования, с которым я знаком, как только функция попадает в точку возврата, она завершает обработку *. Если есть возвращаемое значение, оно возвращается обратно туда, где первоначально была вызвана функция. Python не является исключением.
У вашей функции есть немного лишнего мусора, чтобы было труднее читать, что не помогает. В частности, присвоение b
является совершенно излишним, поскольку назначенное значение никогда не используется. Мы можем переписать вашу функцию как это для ясности, все еще объясняя несколько возвратов:
def proc4(a, b): # line 1
if test(a): # line 2
return b # line 3
return a # line 4
Теперь, что происходит, это. Скажем, что test(a)
оценивает на True
в строке 2. Мы вводим блок if
и встречаем строку 3: return b
. Функция теперь возвращает значение b
туда, откуда оно было вызвано, и выполнение завершено. Строка 4 никогда не выполняется.
В качестве альтернативы, если test(a)
оценено до False
, тогда мы не вводим блок if
. В этом случае мы пропустим строку 3 прямо к строке 4. Теперь мы выполняем строку 4 и возвращаем значение a
туда, куда был вызван proc4
.
* Есть некоторые утверждения потока управления, такие как finally
на многих языках, что может код причины в функции, которая будет выполняться после того, как оператор возврата встречается. Для простоты и потому, что это не по теме, я не буду вдаваться в это в этом ответе. Спасибо @Racso за то, что я пропустил это!
Не правда ли?Не могли бы вы попытаться сделать свой вопрос яснее? – user2357112
Извините, но я действительно попытался сделать свой вопрос ясным. –
Я тоже смущен. Как вы думаете, «переписывается» на 'a'? Функция завершается, как только она возвращает что-либо. –