Как создать свою функцию в python
Перейти к содержимому

Как создать свою функцию в python

  • автор:

Как создать свою функцию в python

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Python. Урок 10. Функции в Python

Follow us on Google Plus Follow us on rss

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

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

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

Создание функций

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

def fun(): pass 

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

>>> def fun(): return 1 >>> fun() 1 

Работа с функциями

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

>>> def summa(a, b): return a + b >>> summa(3, 4) 7 

Рассмотрим еще два примера использования функции: вычисление числа Фибоначчи с использованием рекурсии и вычисление факториала с использованием цикла.

Вычисление числа Фибоначчи.

>>> def fibb(n): if n == 0: return 0 elif n == 1: return 1 elif n == 2: return 1 else: return fibb(n-1) + fibb(n-2) >>> print(fibb(10)) 55 
>>> def factorial(n): prod = 1 for i in range(1, n+1): prod *= i return prod >>> print(factorial(5)) 120 

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

>>> import math >>> f = math.factorial >>> print(f(5)) 120 

lambda-функции

Lambda-функция – это безымянная функция с произвольным числом аргументов и вычисляющая одно выражение. Тело такой функции не может содержать более одной инструкции (или выражения). Данную функцию можно использовать в рамках каких-либо конвейерных вычислений (например внутри filter(), map() и reduce()) либо самостоятельно, в тех местах, где требуется произвести какие вычисление, которые удобно “завернуть” в функцию.

>>> (lambda x: x**2)(5) 25 

Lambda-функцию можно присвоить какой-либо переменной и в дальнейшем использовать ее в качестве имени функции.

>>> sqrt = lambda x: x**0.5 >>> sqrt(25) 5.0 

Списки можно обрабатывать lambda-функциями внутри таких функций как map(), filter(), reduce(), о них мы ещё поговорим, а пока рассмотрим пример с map(). Функция map принимает два аргумента, первый – это функция, которая будет применена к каждому элементу списка, а второй – это список, который нужно обработать.

>>> l = [1, 2, 3, 4, 5, 6, 7] >>> list(map(lambda x: x**3, l)) [1, 8, 27, 64, 125, 216, 343]

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

Раздел: Python Уроки по Python Метки: Python, Уроки Python

Python. Урок 10. Функции в Python : 5 комментариев

  1. Sva 20.07.2021 Спасибо)) Благодаря этим материалам хочу стать хацкером)
  1. Дмитрий 22.09.2022 fibb(5-1) + fibb(5-2) – это не 4 + 3, а число Фибоначчи по 4 + число Фибоначчи по 3, что соответствует Ф(4) = (Ф(3) + Ф(2)) = 3 и Ф(3) = (Ф(2) + Ф(1)) = 2 ==> 3+2 = 5

Python: Создание (определение) функций

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

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

# Гипотетический пример # Место откуда берется функция from emails import send email = 'support@hexlet.io' title = 'Помогите' body = 'Я написал историю успеха, как я могу получить скидку?' # Один маленький вызов — много логики внутри send(email, title, body) 

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

Создадим нашу первую функцию. Ее задача — вывести на экран приветствие:

Hello, Hexlet! 
# Определение функции # Определение не вызывает и не выполняет функцию # Мы лишь говорим, что теперь такая функция существует def show_greeting(): # Внутри тела отступ четыре пробела text = 'Hello, Hexlet!' print(text) # Вызов функции show_greeting() # => 'Hello, Hexlet!' 

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

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

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

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

# Минимальное определение функции def noop(): pass noop() 

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

Задание

Реализуйте функцию с именем print_motto() , которая выведет на экран фразу Winter is coming.

print_motto() # => Winter is coming 

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

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Полезное

Создание функций в Python 3

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

  • print() — выводит информацию;
  • int() — преобразовывает строковый или числовой тип данных в целочисленный тип данных;
  • len() — возвращает длину значения.

В данной инструкции мы рассмотрим создание новых функций для использования в нашем проекте.

Подготовка перед работой

Необходимо подготовить систему к работе, установите последнюю версию Python 3 и разверните виртуальную среду.

Определение функции

Рассмотрим обычный код такой, как для вывода информации. Создадим файл test_hello.py и добавим функцию в нашей виртуальной среде. Функция определяется с помощью ключевого слова def():

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

Добавим следующий кусок кода для вывода информации в консоль.

def hello():
print(«Hello, Dear, User!»)

В конце кода вызовем функцию hello().

def hello():
print(«Hello, Dear, User!»)

Запустим код и получим результат:

python3 test_hello.py

Результат написанной функции

Функции бывают разной сложности, самую простую рассмотрели выше.

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

# Создание функции names()
def names():
# Переменная для ввода имени
name = str(input(‘Введите своё имя: ‘))
# Проверка на гласные буквы
if set(‘aeiou’).intersection(name.lower()):
print(‘В вашем имени есть гласные буквы!’)
else:
print(‘Ваше имя не содержит гласных букв’)

# Итерация по имени
for letter in name:
print(letter)

# Вызов функции
names()

Так, мы создали функцию names() и использовали в ней условные операторы if-else и оператор for.

Работа с параметрами

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

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

Рассмотрим код с тремя параметрами i, j и k и создадим функцию для складывания их всех вместе в разных конфигурациях. Затем их суммы будут напечатаны в функции add(). Для получения результата вызовем функцию.

Напишем следующий кусок кода в новом файле TestAdd.py:

def add(i, j, k):
q = i + j
w = i + k
e = j + k
print(q, w, e)

Передали данные в параметры, т.е. 20 — для параметра i, 25 — для параметра j, 30 — для параметра k. Программа выполняет следующие математические действия:

q = 20 + 25
w = 20 + 30
e = 25 + 30

Запустим программу и получим наш результат в виде:

Когда мы передали 20, 25 и 30 в качестве параметров функции add(), мы получили ожидаемый результат.

Ключевые аргументы

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

Создадим файл с названием TestInfo. Определим функцию info() и присвоим параметры. Добавим оператора print() для вывода информации. В конце кода вызовем функцию info с использованием параметров и их значений, определенных внутри вызова функции info().

# Функция с параметрами
def info(name, age):
print(«Name: » + name)
print(«Age: » + str(age))

Далее рассмотрим присвоение значений параметрам.

# Определение функции с параметрами
def info(name, age):
print(«Имя: » + name)
print(«Возраст: » + str(age))

#Вызов функции с параметрами выше
info(«ServerSpace», 25)

#Вызов функции с использованием ключевых аргументов
info(name=»Team», age=35)

Запустим код и получим результат:

Результат, полученный с использованием параметров и ключевых аргументов

В следующем коде рассмотрим указывания параметра age в начале вызова функции info(). После определения функции мы вызываем оператора print() для вывода информации об имени и возрасте.

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

# Определение функции с параметрами
def info(name, age):
print(«Name: » + name)
print(«Age: » + str(age))

#Вызов функции с использованием ключевых аргументов
info(age=40, name=»ServerSpaceTeam»)

Результат вызова параметров

Присваивание ключевых аргументов

Скопируем файл TestInfo.py и изменим название на TestInfoValue.py

cp TestInfo.py TestInfoValue.py

По умолчанию параметру возраст присваиваем значение “1”. Если вызвать функцию info, не указав значение параметра age, получим результат Age = 1. Рассмотрим варианты вызова функции info с указыванием значения параметра age и с использованием ключевого аргумента:

# Определение функции с параметрами
def info(name, age=1):
print(«Name: » + name)
print(«Age: » + str(age))

#Вызов функции с ключевым аргументом и без ключевого аргумента
info(name=»ServerSpace»)
info(name=»Team», age=15)

Результат выполненного кода с использованием значения по умолчанию

Мы рассмотрели два вида вызова функции info(). В первом случае мы указали значение параметру name и не указали значение параметру age и при выводе информации параметру age было присвоено значение по умолчанию “1”. Во втором случае указали значения обоим параметрам, но значение параметра age по умолчанию не было отображено.

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

Данные из параметров можно передавать в функцию. Значение параметра можно возвращать с помощью оператора return.

При использовании return без аргумента, получим результат со значением None.

Создадим файл TestSquare.py и определим функцию testsquare с параметром i. Добавим переменную j в котором возведём параметр i в третью степень. Используем return, чтобы вернуть значение полученное в результате операции внутри переменной j. С помощью переменной result, присвоим значение 5 параметру i в функции testsquare. В конце кода используем оператор print() для вывода информации result. В результате вернется значение операции 5 ** 3. Использование “**” в Python обозначает возвышение в степень:

def testsquare(i):
j = i ** 3
return j

result = testsquare(5)
print(result)

После запуска кода и получим результат:

Возвращение функции с помощью return

Если закомментировать строку return j, то получим результат:

Возвращение None значения

Рассмотрим возвращение функции с помощью return в файле TestAdd.py:

def add(i, j, k):
q = i + j
w = i + k
e = j + k
return q, w, e

result = add(20,25,30)
print(result)

Запустим код и получим результат:

Результат возвращения функции

Получаем значение (45, 50, 55) в виде кортежа, потому что при вызове функции return переменные указывали через запятую.

Использование main() в виде функции

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

Рассмотрим использование main() в обычной программе, создадим файл TestMain.py. Определим функцию TestMain и добавим оператора print() для вывода текста. Определим функцию main() и добавим оператора print(). В нижней части кода добавим TestMain() и main() для вызова функций и вывода текста. Напишем код, запустим и получим результат:

def TestMain():
print(«Hello, Dear, User!»)

def main():
print(«This is test text»)

Результат вышеописанного кода

В Python можно использовать следующую конструкцию ‘__main__’, в котором будет выполняться код верхнего уровня.

Целая конструкция выглядит следующим образом:

if __name__ == ‘__main__’:

Рассмотрим программу с использованием конструкции ‘__main__’. Логика программы в том, чтобы код анализировал введённое значение в переменную name и сопоставил с гласными буквами. Если в имени есть гласные буквы, то будет возвращен результат
“В вашем имени есть гласные буквы”:

# Объявление глобальной переменной и для ввода имени
name = str(input(‘Ваше имя: ‘))

# Функция для проверки гласных букв
def vowel():

if set(‘aeiou’).intersection(name.lower()):
print(‘В вашем имени есть гласные буквы.’)
else:
print(‘В вашем имени нет гласных букв.’)

# Итерация букв в имени
def print_letters():
for letter in name:
print(letter)

# Определение главной функции
def main():
has_vowel()
print_letters()

# Выполнение функции main
if __name__ == ‘__main__’:
main()

Также в конце можно указать две функции has_vowel() и print_letters(), результат будет одинаковым:

if __name__ == ‘__main__’:
has_vowel()
print_letters()

Результат выполненного кода

Выводы

В итоге можем сказать, функции — это объекты, принимающие аргументы и возвращающие значение.

Подробнее о написании модуля в Python, предлагаем посмотреть в нашей инструкции.

Здесь мы рассмотрели такие возможности, как:

  • определение функций;
  • работу с параметрами функций;
  • ключевые аргументы;
  • возвращение значений с помощью return;
  • использование main() в виде функции.

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

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