Как выйти из функции python
Перейти к содержимому

Как выйти из функции python

  • автор:

Как остановить выполнение функции в Python?

Для остановки выполнения функции в Python можно использовать ключевой оператор return . Когда функция достигает этого оператора, она прекращает выполнение и возвращает указанное значение.

def func(): print('Часть функции, где код сработает') x = 11 return x # Функция возвращает значение переменной x и завершает свою работу. print('Эта часть функции - нет') y = 22 return y a = func() print(a) # => Часть функции, где код сработает # => 11 

Python — как прервать выполнение функции из другой функции?

Вопрос — как я могу описать такую вещь — есть функция выполняющая определенные действия, внутри нее я вызываю вторую функцию, в которую я передаю функцию-родитель и внутри второй функции я должен исходя из определенных условий либо продолжить выполнение функции-родителя, либо прервать ее выполнение. Возможно ли такое реализовать и, если возможно, то как?

Отслеживать
задан 8 сен 2017 в 4:23
Егор Кулик Егор Кулик
868 1 1 золотой знак 5 5 серебряных знаков 16 16 бронзовых знаков
Описали странное желание (и мне кажется я даже до конца и не понял), мб просто кинуть исключение?
8 сен 2017 в 5:49

Опишите какую проблему пытаетесь решить с помощью прерывания (какой контекст)? Что такое «Ошибка молотка» или «Ошибка XY»?

8 сен 2017 в 6:00
связанный вопрос Можно ли прервать цикл, находясь внутри функции?
8 сен 2017 в 14:33

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Выбросте исключение

(то что предложил jfs)

def child_func(): if something_went_wrong: raise Exception("Something went wrong") def parent_func(): # . try: child_func() except Exception as e: print("Error:", e) return # . 

Можно исключение не обрабатывать, если это уместно и не повредит работе (мало ли, может при не выполнении некоего условия вы хотите, что бы все «легло»)

Верните bool

def child_func(): if something_went_wrong: return False # . return True def parent_func(): # . result = child_func() if result: print("Something went wrong") return # . 

Возврат значений из функции. Оператор return

Функции могут передавать какие-либо данные из своих тел в основную ветку программы. Говорят, что функция возвращает значение. В большинстве языков программирования, в том числе Python, выход из функции и передача данных в то место, откуда она была вызвана, выполняется оператором return .

Если интерпретатор Питона, выполняя тело функции, встречает return , то он «забирает» значение, указанное после этой команды, и «уходит» из функции.

def cylinder(): r = float(input()) h = float(input()) # площадь боковой поверхности цилиндра: side = 2 * 3.14 * r * h # площадь одного основания цилиндра: circle = 3.14 * r**2 # полная площадь цилиндра: full = side + 2 * circle return full square = cylinder() print(square)
3 7 188.4

В данной программе в основную ветку из функции возвращается значение локальной переменной full . Не сама переменная, а ее значение, в данном случае – какое-либо число, полученное в результате вычисления площади цилиндра.

В основной ветке программы это значение присваивается глобальной переменной square . То есть выражение square = cylinder() выполняется так:

  1. Вызывается функция cylinder() .
  2. Из нее возвращается значение.
  3. Это значение присваивается переменной square .

Не обязательно присваивать результат переменной, его можно сразу вывести на экран:

. print(cylinder())

Здесь число, полученное из cylinder() , непосредственно передается функции print() . Если мы в программе просто напишем cylinder() , не присвоив полученные данные переменной или не передав их куда-либо дальше, то эти данные будут потеряны. Но синтаксической ошибки не будет.

В функции может быть несколько операторов return . Однако всегда выполняется только один из них. Тот, которого первым достигнет поток выполнения. Допустим, мы решили обработать исключение, возникающее на некорректный ввод. Пусть тогда в ветке except обработчика исключений происходит выход из функции без всяких вычислений и передачи значения:

def cylinder(): try: r = float(input()) h = float(input()) except ValueError: return side = 2 * 3.14 * r * h circle = 3.14 * r**2 full = side + 2 * circle return full print(cylinder())

Если попытаться вместо цифр ввести буквы, то сработает return , вложенный в except . Он завершит выполнение функции, так что все нижеследующие вычисления, в том числе return full , будут опущены. Пример выполнения:

r None

Но постойте! Что это за слово None , которое нам вернул «пустой» return ? Это ничего, такой объект – «ничто». Он принадлежит классу NoneType . До этого мы знали четыре типа данных, они же четыре класса: int , float , str , bool . Пришло время пятого.

Когда после return ничего не указывается, то по умолчанию считается, что там стоит объект None . При желании мы можете явно писать return None .

Более того. Ранее мы рассматривали функции, которые вроде бы не возвращали никакого значения, потому что в них не было оператора return . На самом деле возвращали, просто мы не обращали на него внимание, не присваивали никакой переменной и не выводили на экран. В Python всякая функция что-либо возвращает. Если в ней нет оператора return , то она возвращает None . То же самое, как если в ней имеется «пустой» return .

Возврат нескольких значений

В Питоне позволительно возвращать из функции несколько объектов, перечислив их через запятую после команды return :

def cylinder(): r = float(input()) h = float(input()) side = 2 * 3.14 * r * h circle = 3.14 * r ** 2 full = side + 2 * circle return side, full s_cyl, f_cyl = cylinder() print("Площадь боковой поверхности %.2f" % s_cyl) print("Полная площадь %.2f" % f_cyl)

Из функции cylinder() возвращаются два значения. Первое из них присваивается переменной s_cyl , второе – f_cyl . Возможность такого группового присвоения – особенность Python, обычно не характерная для других языков:

>>> a, b, c = 10, 15, 19 >>> a 10 >>> b 15 >>> c 19

Фокус здесь в том, что перечисление значений через запятую (например, 10, 15, 19 ) создает объект типа tuple . На русский переводится как «кортеж». Это разновидность структур данных, которые будут изучены позже.

Когда же кортеж присваивается сразу нескольким переменным, то происходит сопоставление его элементов соответствующим в очереди переменным. Это называется распаковкой.

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

Распаковка не является обязательной. Будет работать и так:

print(cylinder())
4 3 (75.36, 175.84)

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

Практическая работа

  1. Напишите программу, в которой вызывается функция, запрашивающая с ввода две строки и возвращающая в программу результат их конкатенации. Выведите результат на экран.
  2. Напишите функцию, которая считывает с клавиатуры числа и перемножает их до тех пор, пока не будет введен 0. Функция должна возвращать полученное произведение. Вызовите функцию и выведите на экран результат ее работы.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Как завершить выполнение функции?

Как мне сделать так, чтобы при вызове функции f из g, функция g не ждала выполнение функции f, а просто завершалась. Любые способы подойдут. Спасибо!

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как в PyQt5 остановить выполнение функции
Есть потребность остановить выполнение функции при помощи кнопки в PyQt5. Как я себе это.

Как прекратить выполнение функции?
Приветствую форумчан) С циклами все понятно — break, а как выйти из функции? Например, у меня.

Можно ли завершить досрочно выполнение функции?
можно ли завершить досрочно выполнение функции (типа break но не для цикла)

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

Как завершить выполнение программы?
Всем снова привет сегодня я хотел бы узнать как обеспечить выход из программы. cout << "Выйти из.

Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29

ЦитатаСообщение от Олег2003 Посмотреть сообщение

функция g не ждала выполнение функции f, а просто завершалась.

но там никакого ожидания и нет, все мнгновенно выполняется, причем не понятна суть функции f

Добавлено через 33 секунды
но в целом никак, разве что стартовать ее в отдельном потоке/процессе

Регистрация: 29.09.2017
Сообщений: 9

Суть функции нет. Проблема в том, что функция g не завершится, пока не выполнится функция f, даже если это происходит моментально, мне надо сделать так, чтобы функция g завершалась до выполнения функции f

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18966 / 9661 / 2710
Регистрация: 21.10.2017
Сообщений: 21,466

ЦитатаСообщение от Олег2003 Посмотреть сообщение

функция g завершалась до выполнения функции f
Запускать ее перед функцией f

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

ЦитатаСообщение от Олег2003 Посмотреть сообщение

Вот пример кода:

Не стоит выкладывать в качестве примера то, что примером не является.

ЦитатаСообщение от Олег2003 Посмотреть сообщение

мне надо сделать так, чтобы функция g завершалась до выполнения функции f

Выше тебе написали — запускай поток.

Добавлено через 1 минуту

ЦитатаСообщение от Олег2003 Посмотреть сообщение

Любые способы подойдут.

Если бы ты сумел сформулировать задачу точно, то понял бы, что любые — не подойдут.

Вполне возможно, что тебе нужно на самом деле асинхронное выполнение.

Автоматизируй это!

Эксперт Python

7537 / 4554 / 1205
Регистрация: 30.03.2015
Сообщений: 13,116
Записей в блоге: 29

ЦитатаСообщение от Олег2003 Посмотреть сообщение

Проблема в том, что функция g не завершится, пока не выполнится функция f, даже если это происходит моментально, мне надо сделать так, чтобы функция g завершалась до выполнения функции f

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

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как завершить выполнение потока
Делаю так: int btncnt = 0; private void button1_Click_1(object sender, EventArgs e) .

Как завершить выполнение кода (не Exit)?
Ребята помогите с кодом, ниже приведена функция, которая должна проверять значение Edit и в случае.

Как принудительно завершить выполнение запроса?
Допустим, написали вы "тяжелый" запрос, который сильно грузит сервер. Что нужно сделать, чтобы.

Как принудительно завершить выполнение программы?
class Program < static void Main(string args) < Triangle T =.

Как завершить выполнение процедуры раньше времени?
Внутри процедуры, при выполнении определенного условия нужно вывести сообщение и остановить.

Останов Application.OnTime. Как завершить выполнение?
Запускается Application.OnTimeOnTime(EarliestTime, Procedure, LatestTime, Schedule). В коде нет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *