Быстрая навигация:
- процедуры - это функции которые не возвращают результат и
- функции - которые результат возвращают. Т.е. результат работы функции можно присвоить какой либо переменной.
В языке программирования СИ такого разделения нет - там оба этих вида называются функциями.
Для чего нам нужна ситуация, когда функция возвращает нам результат своей работы?
Это необходимо для того, чтобы мы могли использовать его для дальнейших расчетов в нашей программе.
Важным моментом является тот факт, что все переменные, которые инициализируются в теле функции уничтожаются после завершения работы этой функции, т.к. они являются локальными - т.е. действуют только в определенном месте (мы еще коснемся этого момента позднее).
Для того, чтобы сохранить результат работы функции применяется специальная команда return
Рассмотрим пример:
def getSumma(x,y):
rezult = x + y
return rezult
Разберем код программы:
- Определяем функцию getSumma и передаем ей в качестве аргументов два параметра - x и y
- Рассчитываем сумму переданных значений rezult = x + y
- Возвращаем обратно результат return rezult
Вызвав функцию командой
getSum(3,3)
Мы передали в нашу функцию два числа 3 и 3, которые были сложены друг с другом.
Получаем результат
6
Этот результат мы можем присвоить какой либо переменной для использования его далее.
sum = getSum(3,3)
Теперь в переменной sum находится значение 6 и оно никуда не пропадет - мы можем использовать его при необходимости далее.
Последние две строчки кода нашей программы можно оформить в виде одной строки таким образом:
return x + y
Присваивание результата вычислений можно оформить так же как мы это делали только что:
sum = getSum(3,3)
Вывод на печать результата вычислений можно оформить несколькими способами:
1
Передача значений в функцию и получения результата вычислений сразу же
getSum(3,3)
2
После присваивания результата вычислений переменной, мы вызываем эту переменную и видим то значение, которое там записано.
sum
3
Печать результата вычислений функции getSum передавая ей необходимые значения непосредственно в функции вывода данных print()
print(getSum(5,5))
4
Печать значения переменной sum используя функцию print()
print(sum)
Вот еще один пример с несколькими переменными
Определим функцию с тремя параметрами и вернем значение их суммы:
def abc(a,b,c):
return a + b + c
Передадим функции три числовых значения и выведем на печать результат:
abc(10,20,30)
60
Присвоим результат вычислений переменной q и выведем его на печать:
q = abc(11,21,31)
q
63
Используем для вывода на печать функцию print() и передадим через нее же данные для расчета:
print(abc(40,50,60))
150
А теперь сделаем так:
Создадим три переменные со своими значениями:
num1 = 12
num2 = 13
num3 = 14
И передадим значения этих переменных в виде аргументов в нашу функцию для расчета их суммы:
abc(num1,num2,num3)
Получим результат:
39
Обратите внимание, что при передаче параметров через переменные они (имена этих переменных) НЕ ОБЯЗАНЫ называться так же как и в самой функции!
То есть:
- в нашей функции аргументы, которые получает функция называются как - a, b, с
- а передаем мы значения переменных с именами num1, num2, num3
То есть:
- в нашей функции аргументы, которые получает функция называются как - a, b, с
- а передаем мы значения переменных с именами num1, num2, num3
Главное, чтобы соответствовало количество передаваемых аргументов и тип данных.
Программа видит, что мы передаем необходимые значения в функцию abc и передаем мы именно ТРИ параметра и в результате мы получаем требуемое вычисление.
Если вы попытаетесь передать только ДВА параметра ИЗ ТРЕХ, то получите ошибку:
abc(num1,num2)
Traceback (most recent call last):
File "", line 1, in <module />
abc(num1,num2)
TypeError: abc() takes exactly 3 arguments (2 given)
В которой говорится, что требуется передать ТРИ параметра, а не ДВА
То же самое произойдет если вы попытаетесь передать в функцию данные разного типа.
Создадим переменную строкового типа со значением void
num4 = 'void'
А теперь передадим в нашу функцию abc такие значения:
abc(num1,num2,num4)
Как видите два первых значения имеют тип int (целое число), а третий параметр имеет тип - str - строка
И что получаем?
Ошибку!
Traceback (most recent call last):
File "", line 1, in <module />
abc(num1,num2,num4)
File "", line 2, in abc
return a + b + c
TypeError: unsupported operand type(s) for +: 'int' and 'str'
В которой и говорится о неподдерживаемом типе операнда...
Теперь посмотрим более сложный вариант с возвратом нескольких значений.
Используем для этого функцию myFunction которая принимает три значения и выполняет с каждым из значений определенную математическую операцию и вернем все три значения этих переменных
определим переменные a,b,c
a = 2
b = 3
c = 4
Создадим нашу функцию:
def myFunction(a,b,c):
a = a + 10
b = b **2 # возведение в степень 2
c = c - 10
return a,b,c
Данный результат можно присвоить новым переменным для дальнейшего использования:
x, y, z = myFunction(a,b,c)
Эта запись говорит нам о том, чтобы:
- переменной x было присвоено значение переменной a
- переменной y было присвоено значение переменной b
- переменной z было присвоено значение переменной c
- переменной y было присвоено значение переменной b
- переменной z было присвоено значение переменной c
Проверим это введя в интерпретатор Питона:
x
12
y
9
z
-6
Можно и сразу присвоить значения новым переменным с передачей необходимых значений в нашу функцию:
x, y, z = myFunction(5,6,7)
x
15
y
36
z
-3