Возврат значений из функции. Оператор 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() выполняется так:
- Вызывается функция cylinder() .
- Из нее возвращается значение.
- Это значение присваивается переменной 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)
На экран выводится кортеж, о чем говорят круглые скобки. Его также можно присвоить одной переменной, а потом вывести ее значение на экран.
Практическая работа
- Напишите программу, в которой вызывается функция, запрашивающая с ввода две строки и возвращающая в программу результат их конкатенации. Выведите результат на экран.
- Напишите функцию, которая считывает с клавиатуры числа и перемножает их до тех пор, пока не будет введен 0. Функция должна возвращать полученное произведение. Вызовите функцию и выведите на экран результат ее работы.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Как вернуться в начало условия if?
Как, после else вернуться в начало условия (io = input(‘Въезд(i) или выезд(o)?: ‘))?
Заранее благодарен.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как вернуться в начало выполнения цикла while при возникновении условия?
Пользователь вводит переменную, которая в последствии используется в switch. Нужно проверить эту.
Как вернуться в начало?
как мне сделать, что бы после одного перевода можно было дальше писать месяца? namespace.

Как вернуться в начало цикла
Есть ли команда которая возвращает в начало цикла? К примеру есть цикл do while в нем условие if.
Как вернуться в начало программы.
Как сделать так, чтобы при наступления какого-либо условия программа прерывалась и начаналась.
Как вернуться в начало программы?
Собственно несколько дней назад начал изучать язык С++,добрался до темы switch,в общем и целом.
Как вернуть программу на начало ввода Python
Как сделать так чтобы после вывода конвертированного числа пользователь мог вернуться к началу выбора задания?
Отслеживать
задан 8 июн 2019 в 20:18
3 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Оберните весь код в функцию, например, convert , запустите её 1 раз, а потом в цикле спрашивайте пользователя, хочет ли он запустить код ещё раз (или вовсе не спрашивайте). В зависимости от ответа вызывайте её или завершайте программу:
def convert(): z=int(input('Введите номер задания ')) if z == 1: m=float(input('Введите количество мегабайт ')) g=int g=m/1024 print(g) elif z==2: g=float(input('Введите количество гигабайт ')) m=int m=g*1024 print(m) print('Эта программа создана для конвертации мегабайт в гигабайты и обратно') print('1.-конвертация мегабайт в гигабайты') print('2.-конвертация гигабайты в мегабайты') convert() while True: flag = input('Ещё раз? [да/нет]: ') if flag == 'да': convert() else: break
UPD:
Ваш код написан не в Pythonic-style :). Как минимум, Вам не следует делать g=int , m=int :
def convert(): z = int(input('Введите номер задания: ')) if z == 1: m = float(input('Введите количество мегабайт: ')) g = m / 1024 print(g) elif z == 2: g = float(input('Введите количество гигабайт: ')) m = g * 1024 print(m) print( 'Эта программа создана для конвертации мегабайт в гигабайты и обратно' '\n' '1 - конвертация мегабайт в гигабайты' '\n' '2 - конвертация гигабайты в мегабайты' '\n' ) convert() while True: flag = input('Ещё раз? [да/нет]: ') if flag == 'да': convert() else: break
Как вернуться в начало программы на любом языке программирования?
Важной частью процесса создания программы является способность организовывать логику ее выполнения и, при необходимости, вернуться в начало программы. Этот процесс может потребоваться в различных сценариях, например, для обработки ошибок, выполнения повторных итераций или просто для создания интерактивных приложений. В этой статье мы рассмотрим различные способы возврата к началу программы на различных языках программирования. Мы рассмотрим использование циклов, условных операторов и других инструментов, которые помогут вам эффективно управлять потоком выполнения вашей программы и делать ее более гибкой и интерактивной.
Теория
Для возврата к началу программы на любом популярном языке программирования вы можете использовать циклы, такие как for, while или do-while, либо оператор goto. Однако использование оператора goto не рекомендуется, так как он может делать код менее читаемым и управляемым, и может привести к проблемам с поддержкой и отладкой. Рекомендуется использовать циклы и условные операторы для организации логики вашей программы.
Ниже представлены примеры использования цикла while для создания бесконечного цикла, который может быть прерван с помощью условия. В этих примерах программа будет выполняться до тех пор, пока переменная равна true. Как только пользователь введет «нет» в ответ на вопрос, программа завершит выполнение и выйдет из цикла. Вы можете изменить логику внутри цикла в зависимости от ваших потребностей.
C++
Этот код на языке C++ представляет собой простую программу, которая выполняет цикл, позволяя пользователю решать, хочет ли он продолжить выполнение программы или завершить ее.
#include int main() < bool continueProgram = true; while (continueProgram) < // Ваш код здесь std::cout > continueProgram; if (!continueProgram) < std::cout > return 0; >
Давайте разберем, что делает каждая часть кода:
Это объявление переменной continueProgram, которая имеет тип bool (логический тип данных) и инициализируется значением true. Эта переменная будет использоваться для управления выполнением программы.
bool continueProgram = true;
Это цикл while, который выполняется, пока значение переменной continueProgram равно true. Внутри этого цикла находится блок кода, который будет выполняться повторно, пока пользователь не решит завершить программу.
while (continueProgram)
Этот код выводит на экран сообщение, предлагая пользователю выбрать, хочет ли он продолжить выполнение программы.
std::coutЭтот код считывает ввод пользователя и сохраняет его в переменную continueProgram. Если пользователь введет 1, то continueProgram останется равным true, и программа продолжит выполнение. Если пользователь введет 0, то continueProgram станет равным false, и цикл завершится.
std::cin >> continueProgram;Это условный оператор if, который проверяет, если значение continueProgram равно false, т.е., если пользователь выбрал завершить программу, то выводится сообщение «Программа завершена.».
if (!continueProgram)Таким образом, программа будет продолжать выполняться до тех пор, пока пользователь не введет 0 (то есть пока не введен 0 программа будет возвращаться в начало), после чего она завершится.
C#
using System; class Program < static void Main() < bool continueProgram = true; while (continueProgram) < // Ваш код здесь Console.Write("Хотите продолжить? (да/нет): "); string input = Console.ReadLine(); if (input.ToLower() != "да") < continueProgram = false; Console.WriteLine("Программа завершена."); >> > >Python
Рассмотрим пример, как можно вернуться в начало программы на Python.
while True: # Ваш код здесь response = input("Хотите продолжить? (да/нет): ") if response.lower() != "да": print("Программа завершена.") break # Выход из бесконечного циклаЕсли пользователь вводит что-то отличное от «да», программа завершит выполнение и выйдет из цикла с помощью оператора break.
Java
import java.util.Scanner; public class Main < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); String response; while (true) < // Ваш код здесь System.out.print("Хотите продолжить? (да/нет): "); response = scanner.next(); if (!response.equalsIgnoreCase("да")) < System.out.println("Программа завершена."); break; // Выход из бесконечного цикла >> > >Pascal
program StartOverDemo; var ContinueProgram: Boolean; Response: string; begin ContinueProgram := True; while ContinueProgram do begin // Ваш код здесь Write('Хотите продолжить? (да/нет): '); Readln(Response); if not SameText(Response, 'да') then begin ContinueProgram := False; Writeln('Программа завершена.'); end; end; end.JavaScript
let continueProgram = true; while (continueProgram) < // Ваш код здесь let response = prompt('Хотите продолжить? (да/нет)'); if (response && response.toLowerCase() !== 'да') < continueProgram = false; alert('Программа завершена.'); >>
