09-06-2018 12:10

Функции в Python: def. Python 3 для начинающих

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

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

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

Конструкция выбора switch case PHPВам будет интересно:Конструкция выбора switch case PHP

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

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

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

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

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

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

Объектно-ориентированное программирование на Python: классы, описание и особенностиВам будет интересно:Объектно-ориентированное программирование на Python: классы, описание и особенности

Новые функции создаются с помощью инструкции 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 объясняет схему разрешения имен:

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

    • >>>L = 85
    • >>>R = 23
    • >>>def пример_2(K):
    • R = 10
    • C = L + K+R
    • return C
    • >>>пример_2(5)
    • 100

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

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

    Что такое lambda

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

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

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

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

    • >>>f = lambda x, y, z: x + y + z
    • >>>f(2, 3, 4)
    • 9

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

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

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



    Источник