Def что это программирование

Функции и их аргументы

В этой статье я планирую рассказать о функциях, именных и анонимных, инструкциях def, return и lambda, обязательных и необязательных аргументах функции, функциях с произвольным числом аргументов.

Именные функции, инструкция def

Определим простейшую функцию:

Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y.

Теперь мы ее можем вызвать:

Функция может быть любой сложности и возвращать любые объекты (списки, кортежи, и даже функции!):

Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None:

Аргументы функции

Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.

Функция также может принимать переменное количество позиционных аргументов, тогда перед именем ставится *:

Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **:

В переменной kwargs у нас хранится словарь, с которым мы, опять-таки, можем делать все, что нам заблагорассудится.

Анонимные функции, инструкция lambda

Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно присваивать переменной, как делали мы инструкцией def func():

lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном, ведет себя точно так же:

Источник

Функции: объявление и вызов

Вот мы с вами и подошли к одному из фундаментальных моментов в изучении языка Python – функциям. Что это такое? Смотрите. Например, уже знакомая вам функция

выводит сообщения в консоль. Фактически же при ее вызове выполняется определенный фрагмент программы, результатом которого и является вывод информации в заданном виде. И это очень удобно. Благодаря наличию таких функций нам не нужно каждый раз писать дублирующие инструкции для выполнения типовых операций. Собственно, это главное предназначение функций – многократное выполнение определенного фрагмента программы.

Язык Python позволяет программисту создавать свои собственные функции. Для этого используется следующий синтаксис:

def ([список аргументов]):
оператор 1
оператор 2

оператор N

Здесь имя функции придумывается программистом подобно именам переменных и, так как функция – это определенное действие, то ее имя следует выбирать как глагол, например:

go, show, get, set и т.п.

Далее, идет набор операторов, которые образуют тело функции. Именно они начинают выполнятся при ее вызове.

Давайте зададим простейшую функцию, которая будет выводить «hello» в консоль:

Смотрите, мы здесь придумали имя функции «sayHello», записали пустые круглые скобки без аргументов и через двоеточие определили тело функции в виде конструкции print(«hello»). Но это лишь определение функции. Самого вызова здесь еще нет и если запустить программу, то ничего не произойдет.

Чтобы вызвать эту функцию, нужно указать ее имя и в конце обязательно поставить круглые скобки даже если мы не передаем ей никаких аргументов:

Эти круглые скобки являются оператором вызова функции с указанным именем. Теперь, при запуске программы в консоли появится сообщение «hello».

Имя функции без круглых скобок – это фактически ссылка на функцию:

то есть, ссылка на специальный объект, представляющий ту или иную функцию. А раз это ссылка, то мы можем выполнить такую операцию:

тем самым определить ее синоним и вызвать ее уже через это второе имя:

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

Здесь будет уже два вызова этой функции. И так далее. Причем, обратите внимание, мы вызываем функцию только после ее определения. То есть, если записать ее вызвать в самом начале программы, то возникнет ошибка, т.к. данная функция не была определена. Это вроде как:

«сначала нужно испечь пирог и только потом можно его есть.»

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

Если нужно определить еще одну функцию, то мы ее можем записать после первой:

Имена функций должны быть уникальными (также как и имена переменных), поэтому я назвал ее myAbs, т.к. функция abs уже существует. И предполагаю, что она будет вычислять модуль переданного ей числа. Соответственно, в круглых скобках обозначаю этот аргумент. Если теперь мы ее вызовем:

то увидим значение None. Это произошло потому, что функция myAbs явно не возвращает никакого значения. По идее, мы ожидаем возврата переменной x. Для этого нужно записать оператор return, после которого через пробел указываем возвращаемую величину:

Если нужно создать функцию, принимающую два аргумента, например, для вычисления площади прямоугольника, то это делается так:

То есть, аргументы перечисляются через запятую, а тело функции состоит всего из одного оператора return, в котором сразу выполняются необходимые вычисления.

Вызовем эту функцию:

И увидим результат ее работы – значение 31,0. При этом, на первое значение 10 ссылается первый аргумент w, а на второе 5.5 – второй аргумент h. Вот так можно определять различное число аргументов у функций.

Далее, при вызове функций мы должны им передавать ровно столько параметров, сколько указано в их определении. Например, вот такие вызовы работать не будут:

Здесь указано или слишком много, или слишком мало фактических параметров.

Однако у любой функции можно добавить формальные параметры со значениями по умолчанию:

И теперь, можно вызвать эту функцию так:

Смотрите, если формальный параметр не указан, то берется его значение по умолчанию. Если же мы его явно задаем, то берется переданное значение. Здесь нужно помнить только одно правило: формальные аргументы должны быть записаны последними в списке аргументов функции. То есть, вот такая запись:

приведет к синтаксической ошибке.

Теперь, давайте добавим этой функции еще один вот такой формальный параметр:

И функция будет выводить сообщение в формате: «Message»+sep+msg+end. Вызвать эту функцию мы можем таким образом:

и каждому параметру здесь будет соответствовать свое значение в соответствии с указанным порядком. А можно ли вызвать эту функцию, указав только первый и последний аргумент? Оказывается да, Python позволяет это делать. Вот таким образом:

Мы здесь вторым аргументом явно указываем имя формального параметра и присваиваем ему желаемое значение. В результате аргументы msg и sep будут принимать переданные значения, а аргумент end – значение по умолчанию. Это называется именованные параметры, когда мы указываем не просто значение, но еще и имя параметра.

Если нам требуется сразу вернуть несколько значений, то это можно сделать так. Предположим наша функция будет сразу определять и периметр и площадь прямоугольника:

И, далее, вызываем ее:

получаем результат в виде кортежа из двух чисел. Или, так:

Аналогичным образом можно возвращать и списки и словари и вообще любые типы данных.

Далее, в теле функции можно записывать самые разные конструкции языка Python. Например, для возведения числа в целую степень, можно определить такую функцию:

И, затем, вызвать ее:

Интересной особенностью Python в определении функций является возможность переопределять уже существующие функции. Например, у нас задана вот такая функция:

Тогда ниже мы можем ее переопределить, если укажем то же самое имя:

Теперь, при ее вызове:

увидим выполнение последнего, переопределенного варианта. Если дальше ее переопределить вот так:

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

Когда это может пригодиться на практике? Например, если мы хотим определить некоторую функцию в зависимости от условия:

Здесь при значении переменной TYPE_FUNC равной True будет определен первый вариант функции, а иначе – второй вариант. Иногда это бывает полезно.

Элементы функционального подохда к программированию

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

И вызвать мы ее можем так:

Затем, нам потребовалась функция, которая бы находила максимальное из трех чисел. Как ее можно реализовать? Используя идею функционального программирования, это можно сделать следующим образом:

Смотрите, здесь оператор return возвращает значение, которое возвращает функция max2. Но, прежде чем она будет выполнена, вызовется другая функция max2, которая определит максимальное среди чисел b и c. То есть, прежде чем вызвать первую функцию max2 необходимо вычислить ее параметры: первый просто берется их x, а второй вычисляется вложенной функцией max2. Вот так это работает и вот что из себя представляет элемент функционального подхода к программированию.

Причем, благодаря гибкости языка Python, мы можем вызвать эту функцию и для нахождения максимальной строки:

так как строки могут спокойно сравниваться между собой. И вообще, любые величины, которые можно сравнивать на больше и меньше, можно подставлять в качестве аргументов функции max3 и max2.

Задания для самоподготовки

1. Задайте и вызовите функцию, которая вычисляет площадь прямоугольника.

2. Необходимо создать функцию, которая в зависимости от значения формального параметра type будет вычислять или площадь или периметр прямоугольника.

3. Написать функцию поиска максимального значения из переданного ей списка значений.

4. Написать функцию вычисления произведения значений элементов переданного ей списка.

Видео по теме

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#1. Первое знакомство с Python Установка на компьютер

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#2. Варианты исполнения команд. Переходим в PyCharm

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#3. Переменные, оператор присваивания, функции type и id

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#4. Числовые типы, арифметические операции

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#5. Математические функции и работа с модулем math

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#6. Функции print() и input(). Преобразование строк в числа int() и float()

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#8. Введение в строки. Базовые операции над строками

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#9. Знакомство с индексами и срезами строк

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#10. Основные методы строк

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#11. Спецсимволы, экранирование символов, row-строки

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#12. Форматирование строк: метод format и F-строки

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#14. Срезы списков и сравнение списков

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#15. Основные методы списков

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#16. Вложенные списки, многомерные списки

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#17. Условный оператор if. Конструкция if-else

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#19. Тернарный условный оператор. Вложенное тернарное условие

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#20. Оператор цикла while

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#21. Операторы циклов break, continue и else

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#22. Оператор цикла for. Функция range()

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#23. Примеры работы оператора цикла for. Функция enumerate()

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#24. Итератор и итерируемые объекты. Функции iter() и next()

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#25. Вложенные циклы. Примеры задач с вложенными циклами

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#26. Треугольник Паскаля как пример работы вложенных циклов

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#27. Генераторы списков (List comprehensions)

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#28. Вложенные генераторы списков

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#29. Введение в словари (dict). Базовые операции над словарями

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#30. Методы словаря, перебор элементов словаря в цикле

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#31. Кортежи (tuple) и их методы

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#32. Множества (set) и их методы

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#33. Операции над множествами, сравнение множеств

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#34. Генераторы множеств и генераторы словарей

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#35. Функции: первое знакомство, определение def и их вызов

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#36. Оператор return в функциях. Функциональное программирование

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#37. Алгоритм Евклида для нахождения НОД

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#38. Именованные аргументы. Фактические и формальные параметры

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#39. Функции с произвольным числом параметров *args и **kwargs

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#40. Операторы * и ** для упаковки и распаковки коллекций

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#41. Рекурсивные функции

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#42. Анонимные (lambda) функции

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#43. Области видимости переменных. Ключевые слова global и nonlocal

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#44. Замыкания в Python

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#45. Введение в декораторы функций

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#47. Импорт стандартных модулей. Команды import и from

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#48. Импорт собственных модулей

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#49. Установка сторонних модулей (pip install). Пакетная установка

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#50. Пакеты (package) в Python. Вложенные пакеты

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#51. Функция open. Чтение данных из файла

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#53. Запись данных в файл в текстовом и бинарном режимах

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#54. Выражения генераторы

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#55. Функция-генератор. Оператор yield

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#56. Функция map. Примеры ее использования

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#57. Функция filter для отбора значений итерируемых объектов

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#58. Функция zip. Примеры использования

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#59. Сортировка с помощью метода sort и функции sorted

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#60. Аргумент key для сортировки коллекций по ключу

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#61. Функции isinstance и type для проверки типов данных

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#62. Функции all и any. Примеры их использования

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#63. Расширенное представление чисел. Системы счисления

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

#65. Модуль random стандартной библиотеки

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

Источник

Def что это программирование

В функцию могут быть переданы ноль и более аргументов, которые могут использоваться в теле функции.

Первой инструкцией в теле может быть литерал строки, который будет являться документацией для данной функции (строка документации — «docstring»). Некоторые утилиты и среды разработки используют такие строки для формирования интерактивной справки. Документировать код считается хорошим тоном.

Определение функции описывает пользовательский «объект функции» и является исполняемой инструкцией. В ходе исполнения происходит связывание имени функции в текущем локальном пространстве имён (локальной символьной таблице) с «объектом функции» — обёрткой вокруг исполняемого кода функции. Объект функции содержит ссылку на текущее глобальное пространство имён, которое будет использовано при вызове функции. Объект функции может быть в последующем связан и с другим именем (это можно использовать для переименования функций и создания псевдонимов).

Более того, ничто не мешает использовать «объект функции» как любой другой объект (например: передавать в функцию, использовать в качестве значения в словаре и т.п.).

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

Аргументы, с которыми была вызвана функция, также оказываются в её локальной символьной таблице.

Когда функция вызывает другую функцию, для вызова создаётся новая локальная символьная таблица.

В Питоне можно вкладывать одно в другое не только определения функций (этим приёмом, в частости, пользуются при создании декораторов), но и классов (в случае необходимости).

Источник

Функции в Python — синтаксис, аргументы, вызов, выход

Функция — это фрагмент программного кода, который решает какую-либо задачу.

Его можно вызывать в любом месте основной программы. Функции помогают избегать дублирования кода при многократном его использовании. А также имеют ряд других преимуществ, описанных ниже.

Синтаксис

💁‍♀️ Простой пример: Вы торгуете мёдом, и после каждой продажи вам нужно печатать чек. В нём должно быть указано: название фирмы, дата продажи, список наименований проданных товаров, их количество, цены, общая сумма, а также сакраментальная фраза «Спасибо за покупку!».

Если не пользоваться функциями, всё придётся прописывать вручную. В простейшем случае программа будет выглядеть так:

print(«ООО Медовый Гексагон») print(«Мёд липовый», end=» «) print(1, end=»шт «) print(1250, end=»р») print(«\nCумма», 1250, end=»р») print(«\nСпасибо за покупку!»)

А теперь представьте, что произойдёт, когда вы раскрутитесь, и покупатели станут приходить один за другим. В таком случае, чеки надо будет выдавать очень быстро. Но что делать, если вдруг нагрянет ваш любимый клиент и купит 10 сортов мёда в разных количествах? Далеко не все в очереди согласятся ждать, пока вы посчитаете общую сумму и внесёте её в чек.

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

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

# (название, количество, цена за штуку) honey_positions = [ («Мёд липовый», 3, 1250), («Мёд цветочный», 7, 1000), («Мёд гречишный», 6, 1300), («Донниковый мёд», 1, 1750), («Малиновый мёд», 10, 2000), ]

Теперь этот список передадим в функцию как аргумент, и самостоятельно считать больше не придётся.

Да, код стал более массивным. Однако теперь для печати чека вам не придётся самостоятельно вычислять итог. Достаточно лишь изменить количество и цену товаров в списке. Существенная экономия времени! Слава функциям!

Термины и определения

Ключевое слово def в начале функции сообщает интерпретатору о том, что следующий за ним код — есть её определение. Всё вместе — это объявление функции.

# объявим функцию my_function() def my_function(): # тело функции

Аргументы часто путают с параметрами:

Ключевая особенность функций — возможность возвращать значение

# она будет принимать два множителя, а возвращать их округленное # до целого числа произведение def int_multiple(a, b): product = a * b # возвращаем значение return int(product) print(int_multiple(341, 2.7)) > 920

☝️ Главная фишка возвращаемых значений в том, что их можно использовать в дальнейшем коде: присваивать переменным, совершать с ними разные операции и передавать как аргументы в другие функции.

# найдём квадратный корень из возврата функции int_multiple # во встроенную функцию sqrt() мы передали вызов int_multiple print(math.sqrt(int_multiple(44, 44))) > 44

Важность функций

Абстракция

Человек бежит, машина едет, корабль плывёт, а самолёт летит. Всё это — объекты реального мира, которые выполняют однотипные действия. В данном случае, они перемещаются во времени и пространстве. Мы можем абстрагироваться от их природы, и рассматривать эти объекты с точки зрения того, какое расстояние они преодолели, и сколько времени на это ушло.

Мы можем написать функцию, которая вычисляет скорость в каждом конкретном случае. Нам не важно, кто совершает движение: и для человека и для самолёта средняя скорость будет рассчитываться одинаково.

def calculate_speed(distance, time): return distance / time

Это простой пример и простая функция, но абстракции могут быть куда более сложными. И именно тогда раскрывается настоящая сила функций. Вместо того чтобы решать задачу для каждого конкретного случая, проще написать функцию, которая находит решение для целого ряда однотипных, в рамках применяемой абстракции, объектов. В случае сложных и длинных вычислений, это повлечёт за собой значительное сокращение объёмов кода, а значит и времени на его написание.

Возможность повторного использования

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

Например, при работе с массивами чисел, вам нужно часто их сортировать. Вместо того чтобы реализовать простой алгоритм сортировки (или использовать встроенную функцию), вам пришлось бы каждый раз перепечатывать тело этой или похожей функции:

Всего 10 таких сортировок, и привет, лишние 60 строк кода.

Модульность

Разбитие больших и сложных процессов на простые составляющие — важная часть, как кодинга, так и реальной жизни. В повседневности мы занимаемся этим неосознанно. Когда убираемся в квартире, мы пылесосим, моем полы и окна, очищаем поверхности от пыли и наводим блеск на всё блестящее. Всё это — составляющие одного большого процесса под названием «уборка», но каждую из них также можно разбить на более простые подпроцессы.

В программировании модульность строится на использовании функций. Для каждой подзадачи — своя функция. Такая компоновка в разы улучшает читабельность кода и уменьшает сложность его дальнейшей поддержки.

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

Без применения модульности получится сплошная последовательность инструкций:

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

Это и называется модульностью.

Пространство имен

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

💁‍♀️ Пример из жизни: в ВУЗе учатся два человека с совпадающими ФИО. Их нужно как-то различать. Если сделать пространствами имён группы этих студентов, то проблема будет решена. В рамках своей группы ФИО этих студентов будут уникальными.

Объявление и вызов функций

def hello(): print(‘Adele is cute’)

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

# код выполняется последовательно, поэтому сейчас интерпретатор # не знает о существовании функции hello hello() def hello(): print(‘Adele is cute’) > NameError: name ‘hello’ is not defined

Поэтому стоит лишь поменять объявление и вызов местами, и всё заработает:

def hello(): print(‘Adele is cute’) hello() > Adele is cute

Область видимости функций

Рассмотрим подробнее области видимости:

Локальная (L)

Локальная область видимости находится внутри def :

def L(): # переменная i_am_local является локальной внутри L() i_am_local = 5

Область объемлющих функций (E)

def e(): x = 5 def inner_e(): nonlocal x x = x + 1 return x return inner_e() print(e()) > 6

Глобальная (G)

# G num = 42 def some_function(n): res = n + num return res print(some_function(1)) > 43

Аргументы

Позиционные

Вспомним, аргумент — это конкретное значение, которое передаётся в функцию. Аргументом может быть любой объект. Он может передаваться, как в литеральной форме, так и в виде переменной.

Значения в позиционных аргументах подставляются согласно позиции имён аргументов:

Именованные

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

def print_trio(a, b, c): print(a, b, c) print_trio(c=4, b=5, a=6) > 6 5 4

При вызове соответствие будет определяться по именам, а не по позициям аргументов.

Необязательные параметры (параметры по умолчанию)

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

def not_necessary_arg(x=’My’, y=’love’): print(x, y) # если не передавать в функцию никаких значений, она отработает со значениями по умолчанию not_necessary_arg() > My love # переданные значения заменяют собой значения по умолчанию not_necessary_arg(2, 1) > 2 1

Аргументы переменной длины (args, kwargs)

Когда заранее неизвестно, сколько конкретно аргументов будет передано в функцию, мы пользуемся аргументами переменной длины. Звёздочка «*» перед именем параметра сообщает интерпретатору о том, что количество позиционных аргументов будет переменным:

def infinity(*args): print(args) infinity(42, 12, ‘test’, [6, 5]) > (42, 12, ‘test’, [6, 5])

Переменная args составляет кортеж из переданных в функцию аргументов.

Функции в питоне могут также принимать и переменное количество именованных аргументов. В этом случае перед названием параметра ставится » ** «:

def named_infinity(**kwargs): print(kwargs) named_infinity(first=’nothing’, second=’else’, third=’matters’) >

Здесь kwargs уже заключает аргументы не в кортеж, а в словарь.

Передача по значению и по ссылке

В Python аргументы могут быть переданы, как по ссылке, так и по значению. Всё зависит от типа объекта.

Изменяемые объекты передаются в функцию по ссылке. Изменяемыми они называются потому что их содержимое можно менять, при этом ссылка на сам объект остается неизменной.

В Python изменяемые объекты это:

Будьте внимательны при передаче изменяемых объектов. Одна из частых проблем новичков.

💭 В функциональном программировании существует понятие «функциями с побочными эффектами» — когда функция в процессе своей работы изменяет значения глобальных переменных. По возможности, избегать таких функций.

Словарь в качестве аргументов (упаковка)

Передаваемые в функцию аргументы можно упаковать в словарь при помощи оператора «**»:

def big_dict(**arguments): print(arguments) big_dict(key=’value’) >

Возвращаемые значения (return)

Что можно возвращать

Функции в Python способны возвращать любой тип объекта.

Распаковка возвращаемых значений

☝️ Обратите внимание, что количество возвращаемых значение в кортеже должно совпадать с количеством переменных при распаковке. Иначе произойдет ошибка:

Пустая функция

Иногда разработчики оставляют реализацию на потом, и чтобы объявленная функция не генерировала ошибки из-за отсутствия тела, в качестве заглушки используется ключевое слово pass :

Чистые функции и побочные эффекты

Немного функционального программирования. Есть такие функции, которые при вызове меняют файлы и таблицы баз данных, отправляют данные на сервер или модифицируют глобальные переменные. Всё это — побочные эффекты.

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

Чистые функции производят вычисления по заданным аргументам и возвращают зависящий только от них самих результат.

Lambda функции

lambda_test = lambda a, b: pow(a, b) print(lambda_test(2, 4)) > 16

Docstring

Документировать код — особое искусство. Оно существует параллельно с разработкой и сопоставимо с ней по важности. Поэтому нередко документации в программе больше, чем самого кода.

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

Def что это программирование. Смотреть фото Def что это программирование. Смотреть картинку Def что это программирование. Картинка про Def что это программирование. Фото Def что это программирование

Аннотация типов

Python — язык с динамической типизацией. По этой причине вполне возможны ситуации, когда вопреки ожиданиям разработчика в функцию подаются, например, не целые числа, а, допустим, строки. Чтобы отслеживать подобные случаи и сильнее контролировать процесс выполнения программы, была изобретена аннотация типов.

С помощью аннотации типов мы указываем, что параметры в функции имеют строго определенный тип.

При этом интерпретатор считывает аннотации типов, но никак их не обрабатывает.

Функции vs процедуры — в чем отличие?

Для языка нет различий между функциями и процедурами. Но с точки зрения программиста — это разные сущности.

Отличие в том, что функции возвращают значение, а процедуры — нет. Отсюда вытекают и разные области их применения и смысл использования. Скажем, производить некие вычисления в процедуре бессмысленно.

def proc(i, j): pow(i, j) proc(1, 200)

def func(i, j): return pow(i, j) print(func(3, 2)) > 9

И наоборот, оформлять набор инструкций, выполняющий некую обработку, в виде функции также лишено смысла:

def print_low_word(word): print(word.lower()) return 0 s = ‘GOOD’ print_low_word(s) > good

Возвращаемое значение не представляет собой никакой ценности, поэтому print_low_word(s) лучше оформить, как процедуру.

Время выполнения функции

Чтобы оценить время выполнения функции, можно поместить её вызов внутрь следующего кода:

Вложенные функции и рекурсия

Функции, которые объявляются и вызываются внутри других функций, называются вложенными.

def outerFunc(): def firstInner(): print(‘This is first inner function’) def secondInner(): print(‘This is second inner function’) firstInner() secondInner() outerFunc() > This is first inner function > This is second inner function

Рекурсия является частным случаем вложенной функции. Это функция, которая вызывает саму себя.

Источник

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

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