Пожалуйста, рассмотрите эту простую функцию:
def my_func(x):
if x > 5:
print(x)
else:
quit()
print('this should be printed only if x > 5')
Затем, если мы вызовем эту функцию в цикле:
for i in [2, 3, 4, 5, 6, 7]:
my_func(i)
Ожидаемый результат:
6
this should be printed only if x > 5
7
this should be printed only if x > 5
Но quit
на самом деле отключает ядро.
Я знаю, что следующая функция будет работать, но я не хочу, чтобы там был второй отпечаток:
def my_func(x):
if x > 5:
print(x)
print('this should be printed only if x > 5')
else:
pass
Наконец, я знаю, что если я помещу цикл внутри функции, я смогу использовать continue
или break
, но я предпочитаю сохранять функцию простой и вместо этого помещаю вызов функции в цикл.
Итак, что нужно изменить в первой функции, чтобы добиться ожидаемого результата?
Действительно, quit()
выйдет из приложения. Если вы хотите вернуться из функции, return
делает именно это:
def my_func(x):
if x > 5: print(x)
else: return
print('this should be printed only if x > 5')
for i in [2, 3, 4, 5, 6, 7]:
my_func(i)
Это не имеет ничего общего с циклами. return
просто завершает выполнение функции и возвращает управление туда, где функция была вызвана. Если этот элемент управления оказался в цикле, то теперь управление снова возвращается в цикл.
Чтобы завершить функцию преждевременно, вы можете использовать return.
def my_func(x):
if x > 5: print(x)
else: return False
print('this should be printed only if x > 5')
Определенно, но почему False
?
просто привычка, помогает отлаживать
Лучший способ решить эту задачу — проверить обратное условие и вернуться раньше. ИЕ
def my_func(x):
if x < 5:
return
print(f'{x}\nthis should be printed only if x > 5')
Этот шаблон называется защитным заявлением.
Это то, что вы ищете? Как остановить функцию. TLDR используйте
return
для выхода из функции.