Функцией называется отдельный блок программы. У него может быть имя, он может принимать аргументы, с которыми потом будет работать, и может возвращать результат своей работы.
Параметрами функции называются специальныя переменные, которые будут принимать конкретные значения при вызове этой функции. Часто являются локальными переменными внутри этой функции, которые принимают аргументы в качестве значений. Альтернативное название - формальные параметры.
Аргументами или фактическими параметрами называются переменные (выражения, литералыи пр.), переданные в функцию при вызове. По сути, аргументы - это источник реальных значений параметров функции при ее вызове.
Литерал - фактическое значение, которое записывается в переменную или передается в функцию. К примеру, в записи x = 1 литералом является 1.
Можно рассмотреть функцию как черный ящик, в который вкладывают параметры. Ящик что-то делает, вы можете даже не знать, что именно, а потом предоставляет вам возможность работать с результатами своей работы.
В Python функция определяется или декларируется так:
def say_hello():
return "Hello"
res = say_hello()Важнейшие элементы функции:
- Ключевое слово
defговорит о том, что дальше будет функция. - После
defследует название функции, приведенная выше называетсяsay_hello. - Затем следуют скобки с параметрами функции.
- После закрывающей скобки идет двоеточие. Как мы знаем, двоеточие в Python обозначает, что далее будет некий блок кода, выделенный отступами. В случае с условием это блок условия, тело условия, в случае с циклом - тело цикла, в случае с функцией - тело функции или код функции.
- Ключевое слово
returnиспользуется в теле функции для того, чтобы завершить работу функции и вернуть ее результат. Если не написать return, функция вернетNone. Хорошим тоном считается возвращать какое-нибудь значение явно. - Результат работы функции - результат выполнения функции, который она возвращает. В приведенном примере результатом работы функции будет строка
"Hello", из функции она вернется благодаря ключевому словуreturnи поместится в переменнуюres.
Схематически, функцию можно изобразить следующим образом:
def имя_функции():
# Тело функции
# Внутри тела функции прозводятся разные вычисления
"""
Внутри тела функции могут производиться любые действия.
К примеру, условие:
"""
a = 10
if a < 20:
return "Меньше" # возвращаемое значение
elif a > 20:
return "Больше" # и это возвращаемое значение
else:
return "Что то пошло не так..."
# и это возвращаемое значение
В Python принято тело функции, как и тело любого блока, выделять отступом в 4 пробела.
Все, что мы обсуждаем - только лишь создание функции, но не использование ее. Для использования функции ее необходимо вызвать.
Функции создают по несольким причинам:
- Дать имя кусочку кода.
- Иметь возможность вызывать один и тот же кусочек кода несколько раз.
- Абстрагироваться от реализации какого-то решения задачи, которое уже есть.
- Объединить несколько действий в условное "одно" действие.
В любом случае созданную (объявленную) функцию необходимо вызвать, чтобы она выполнила свою задачу. До тех пор, пока функция не вызвана, она бесполезна и ничего не делает.
Вызовем нашу функцию say_hello:
say_hello() # выведет HelloСинтаксис вызова функции:
имя_функции() # скобки обязательны при вызове функцииЕсли просто написать функцию и вызвать ее, мы не увидим возвращаемый результат. Он вернется, но после этого потеряется. Для того, чтобы этот результат не потерять, его нужно передать в работу другой функции, сохранить в переменную или любым другим образом поймать обработать. К примеру, поместим ее в функцию print в качестве аргумента:
print(say_hello()) # HelloКак правило, функция имеет некоторые параметры, с которыми она работает.
Пример из математики, где y - функция от x:
y(x) = 2x
y(x) = −5x + 2
y(x) = 12x2−1
В Python функции так же могут принимать параметры:
def plus(num1, num2):
result = num1 + num2
return resultЗдесь num1 и num2 - параметры функции plus.
При создании функции вы описываете параметры, при вызове - передаете аргументы. Значения аргументов попадают в параметры и внутри функции - это параметры или просто локальные переменные.
В Python, если вы декларируете параметры, то вы обязаны их туда передать, иначе получите ошибку. Вызовем нашу функцию plus с двумя числами-аргументами - 10 и 5:
ten = 10
five = 5
plus(ten, five)
# функция вывела 15
plus(10, 5)
# функция вывела 15В момент выполнения функции параметры num1 и num2 примут значения 10 и 5 соостветственно.
Так же в python можно передавать аргументы не по порядку, но с явным указанием аргумента и соответствию аргумента передаваемому значению
plus(num1=10, num2=5)
plus(num2=5, num1=10)Как видно из примера выше, аргументы можно передавать и в переменных, и литералами.
def func(positional, keyword=value, *args, **kwargs)
passВ Python можно различить 4 вида параметров у функции:
- Позиционные аргументы обязательны и не имеют значений по умолчанию.
- Аргументы с ключевым словом необязательны и имеют значения по умолчанию.
- Список с произвольным количеством аргументов необязателен и не имеет значений по умолчанию.
- Словарь с произвольным количеством аргументов с ключевым словом необязателен и не имеет значений по умолчанию.
Все в Python является объектом. Функции не выделяются и тоже являются объектами. Как и любые други типы данных, функции можно хранить в переменных, передавать параметрами в другие функции и хранить в словарях, списках и кортежах:
Пример передачи функции в качестве параметра:
def run_operation(num1, num2, operation):
return operation(num1, num2)
def plus(num1, num2):
return num1 + num2
def minus(num1, num2):
return num1 - num2
run_operation(10, 5, plus)
# 15
run_operation(10, 5, minus)
# 5Хранение функции в словаре:
def plus(num1, num2):
return num1 + num2
def minus(num1, num2):
return num1 - num2
operations = {
'plus': plus,
'minus': minus
}
def operation(num1, num2, operations_dict, operation):
return operations_dict[operation](num1, num2)Функция map принимает два параметра: функцию и итератор, например, список.
map применяет к каждому элементу списка переданную функцию.
string_numbers = ['1', '2', '3', '4', '5']
new_list = list(map(int, string_numbers))
print(new_list)
# [1, 2, 3, 4, 5, 6, 7]Еще один пример:
def my_square(num):
return num ** 2
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_numbers = list(map(my_square, numbers))
print(squared_numbers)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]Написать 2 функции. Первая функция будет принимать строку и приводить ее к нижнему регистру.
Вторая функция будет принимать строку и проводить ее к верхнему регистру.
После чего с помощью map применить ваши функции к списку строк.
Отдельно каждую функцию к отдельному списку строк!
Написать функцию которая будет простое число возводить в квардрат.
Необходимо возвести в квадрат все простые числа в списке используя функцию map
Вспоминаем работу с файлом. Есть файл, в котором много англоязычных текстовых строк. Считаем частоту встретившихся слов в файле, но через функции и map, без единого цикла!
