Def в питоне это

В языках программирования функции являются именованной частью кода. Это отдельные блоки в тексте программы. Определяются с помощью зарезервированного слова def. В Python к функциям можно обращаться неограниченное количество раз из любой части сценария.

Зачем нужны функции

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

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

Как написать первую функцию

В Python 3 для начинающих свое знакомство с программированием есть самая простая функция print(). Чтобы увидеть ее в действии вам понадобится среда разработки. Для этого скачайте дистрибутив языка с официального сайта и установите Python на компьютер.

Откройте меню «Пуск» и в списке программ найдите Python 3. Разверните его щелчком левой клавиши. В открывшемся списке найдите среду IDLE и запустите ее. Наберите print(«Hello, World!») и нажмите «Ввод». Интерпретатор вернет результат вашей первой функции.

Некоторые программисты предпочитают работать в консоли. Если вы относитесь к их числу, нажмите win+R и введите команду python.exe. Откроется обычный интерпретатор, только с интерфейсом cmd. Наберите программу описанным выше образом и нажмите Enter в конце, чтобы увидеть результат.

Как использовать def

Новые функции создаются с помощью инструкции def. Они так же эффективны, как и встроенные print() или open(), но отличаются от функций в компилирующих языках. Python def относится к исполняемым инструкциям. Это означает, что функции не существует, пока интерпретатор ее не увидит, и не перейдет к ее исполнению.

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

Теперь давайте напишем функцию, возвращающую фразу «Hello, World!», только с использованием def:

  • >>> def здравствуй_мир():
  • print(«Hello, World!»)
  • >>> здравствуй_мир() #вызов функции
  • Hello, World!

Синтаксис функций и return

Инструкция def в Python состоит из заголовка и пишется по следующим правилам:

  • >>>def (аргумент 1, аргумент 2, аргумент N):

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

Также в теле иногда находится return:

  • def (аргумент 1, аргумент 2, аргумент N):
  • .
  • return

Return завершает работу функции и передает вызывающей программе объект-результат. Инструкция не является обязательной. Функция будет работать без return, и завершится, когда поток управления достигнет конца ее тела.

Параметры и аргументы

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

Аргументы внутри функции никак не связаны с объектами вне ее, поэтому в программировании их относят к локальным переменным. Область видимости ограничена блоком функции, который начинается с def и заканчивается return. Чтобы было понятнее, приведем пример:

  • x = 12 #присваиваем переменным ссылки на целочисленные объекты
  • y = 34
  • >>>def example(x,y): #создаем функцию с именем example
  • x = «Hello» #присваиваем значения аргументам x, y
  • y = «Python»
  • print(x, y, sep= «, »)
  • return None
  • >>>example(x, y) #вызываем функцию, не забыв указать параметры
  • Hello, Python
  • >>>print(x, y)
  • 12 34
Читайте также:  Как осуществить смс рассылку

Обратите внимание на предпоследнюю строчку кода. В интерпретаторе Python команда print() вернула переменные x и y из глобальной области видимости.

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

  • >>>def E_2(x, y):
  • return x + y
  • >>>E_2(«Hello, » «Python!») #чтобы слова были разделены, поставьте пробел перед закрывающей кавычкой
  • Hello, Python!
  • E_2(5, 4)
  • 10

Как видно из примера с простой функцией E_2, результат полностью зависит от типа объектов x и y. В первом случае E_2 выполнила конкатенацию, а во втором — арифметическую операцию сложения. В этом заключается принцип полиморфизма и динамической типизации. То, что объекты определяют синтаксический смысл, обуславливает гибкость и простоту языка. Не нужно тратить время на то, чтобы отдельно указать тип данных, с которым работает функция.

Правило LEGB

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

Правило LEGB объясняет схему разрешения имен:

  1. Как только интерпретатор находит переменную внутри инструкции def, он сначала выполняет поиск значений в локальной области видимости.
  2. Если поиск не дает результата, он переходит к области видимости любой всеобъемлющей инструкции def.
  3. Дальше интерпретатор двигается к глобальным именам в верхнем уровне модуля и тем, что обозначены как global.
  4. Если поиск не дает результатов, интерпретатор ищет имена во встроенной области видимости языка Python.

Рассмотрим наглядный пример:

Переменные L и R находятся на верхнем уровне и являются глобальными именами. R, C и K – это локальные переменные, так как присваивание значения происходит внутри инструкции def.

Интерпретатор сначала выполняет операцию сложения для локальных R, C и K, игнорируя переменную R вне инструкции def. Потом ищет L, и не найдя ее среди имен local, переходит на верхний уровень.

Что такое lambda

Помимо def, в Python функции можно создавать с помощью специальных выражений, одно из которых — lambda. Свое оригинальное название получила в честь лямбда-исчислений языка LISP.

Как и def, lambda создает функцию, которую можно будет в дальнейшем вызвать, но не связывает ее с каким-нибудь именем. На практике lambda используют, когда нужно отложить выполнение фрагмента кода.

Основы лямбда-выражений

По внешнему виду lambda-выражения напоминают инструкции def. Вначале пишется ключевое слово lambda, потом аргументы, двоеточие и само выражение:

Тело лямбда представляет собой одно единственное выражение, а не блок инструкций. За счет этого lambda ограничена в возможностях и не настолько универсальна как def. В ней может быть реализована только логика, без циклов while или for.

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

Lambda-выражения очень удобно встраивать в программу. За счет небольшого размера они минимизируют и упрощают код. Но использование лямбда не является принципиальным. В Python 3 начинающим для работы будет достаточно инструкции def.

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

Что такое функция

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

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

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

Объявление

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

  • Объявление происходит с помощью ключевого слова def , за ним идёт имя функции и круглые скобки ().
  • Аргументы, передаваемые в функцию, должны находится в круглых скобках. Там же можно определить их значения по умолчанию, указав их после знака равно.
  • Перед основным содержимым желательно включить строку документации (docstring), которая обычно описывает назначение и основные принципы работы функции.
  • Тело функции начинается после знака двоеточия. Важно не забыть об отступах.
  • Чтобы выйти из функции в Python, используют оператор return [значение] . Если оператор опущен, будет возвращено значение None .
Читайте также:  Что значит инсталлировать программу

Функцию можно объявить где угодно: внутри модуля, класса или другой функции. Если она объявляет внутри класса, то называется методом класса и вызывается так: class_name.function() .

Синтаксис объявления

Параметры (аргументы) нужно передавать в том порядке, в котором они определены в круглых скобках.

Пример кода

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

Вызов

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

Значение функции можно сразу передать в переменную или в другую функцию:

Необязательные параметры

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

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

Вывод будет следующим:

Функция с переменным числом аргументов

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

Для того чтобы функция могла принять переменное количество аргументов, перед именем аргумента ставится символ ” * “. Когда программист передаёт аргументы, они записываются в кортеж, имя которого соответствует имени аргумента:

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

Анонимные функции

Это особый вид функций, которые объявляются с помощью ключевого слова lambda вместо def :

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

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

Синтаксис

Синтаксис лямбда функции в Python 3 предусматривает использование только одного выражения: lambda arg1, arg2, … argn: выражение .
На практике они работают так:

Возврат значений

С помощью оператора return из функции можно вернуть одно или несколько значений. Возвращаемым объектом может быть: число, строка, None.

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

Вот пример когда возвращается список:

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

Рекурсия

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

Рекурсию рекомендуется использовать только там, где это действительно необходимо. Интерпретатор Python автоматически выделяет память для выполняющейся функции, если вызовов самой себя будет слишком много, это приведёт к переполнению стека и аварийному завершению программы. Следующий код вызовет исключение “RecursionError”, которая показывает, что превышен максимальный лимит рекурсии.

Узнать максимальный лимит и его изменить можно с помощью getrecursionlimit() и setrecursionlimit(предел) из библиотеки sys.

Один из примеров применения рекурсии – это расчёт чисел Фибоначчи.

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

Чтобы создать пустую функцию, нужно в её теле использовать оператор заглушки pass . Тогда она будет существовать и не выполнять никаких действий.

Читайте также:  Как изменять размер экрана

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

Области видимости

Область видимости — важная составляющая любого языка программирования. С её помощью в одном модуле можно использовать одно и то же имя переменной несколько раз.

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

В Python существует две области видимости:

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

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

Подробнее про области видимости можно прочитать в отдельной статье на сайте.

Основные встроенные функции в Python

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

  • print() Выводит объекты на экран или в файл. Пример использования print("output string", end="") . Принимает аргументы:
  • object — то, что нужно вывести;
  • sep — разделитель, который ставиться между объектов, по умолчанию — пробел;
  • end — окончание после объекта, например управляющий символ “
    ”;
  • file — атрибут, позволяющий передать объект в файл (по умолчанию выводит на экран);
  • len() Возвращает количество элементов, содержащихся в кортеже, словаре или списке.
  • str() Преобразует переданный в качестве аргумента объект в строку.
  • int() Преобразует объект в целое число. Если передать в качестве аргумента строку, вызовется ошибка, целое число выведется без изменений, а у числа с плавающей точкой отбросится дробная часть.
  • range() Возвращает диапазон значений, в основном используется в условии цикла for.
  • bool() Приводит объект в логическому типу. Например, 0 — False , а 1 — True .
  • sum() Возвращает сумму переданных элементов.
  • min() и max() Возвращают минимальный и максимальный элемент из переданных.
  • type() Возвращает тип объекта, обычно используется при отладке кода.
  • dir() Возвращает список имён, доступных в локальной области видимости, или атрибуты объекта, переданного в качестве аргумента.
  • help() Выводит информацию о переданном объекте из встроенной справочной системы. Её целесообразно использовать только в интерактивном режиме Python интерпретатора.
  • В этой статье я планирую рассказать о функциях, именных и анонимных, инструкциях def, return и lambda, обязательных и необязательных аргументах функции, функциях с произвольным числом аргументов.

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

    Функция в python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def.

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

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

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

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

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

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

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

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

    Как видно из примера, args — это кортеж из всех переданных аргументов функции, и с переменной можно работать также, как и с кортежем.

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

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

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

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

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