Медиаблог /

Что такое функции в Python: синтаксис, виды и примеры кода

8 июля 2026

Что такое функции в Python: синтаксис, виды и примеры кода

Функция в Python — именованный блок кода, объявляемый ключевым словом def. Она принимает аргументы и возвращает результат через return; при отсутствии return возвращает None. Функции Python решают две ключевые задачи: устраняют дублирование по принципу DRY (Don't Repeat Yourself — «не повторяй себя») и делают программу модульной. В статье разберём синтаксис def, пять видов аргументов, правило LEGB для области видимости и семь видов функций — от встроенных до асинхронных — с примерами кода в каждом разделе.

Функции Python — код на тёмном фоне ноутбука с подсветкой синтаксиса

Что такое функция в Python и зачем она нужна

Функция объединяет набор инструкций в единый именованный блок и вызывается столько раз, сколько нужно. Без функций один и тот же код пришлось бы копировать во все нужные места — при ошибке придётся исправлять каждую копию.

image

Не знаете, с чего ребёнку начать в IT?

Дайте попробовать разные направления: Python, веб-разработку и робототехнику

Смотреть программу

Четыре причины использовать функции в программировании:

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

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

Чем функция отличается от процедуры

В Python нет синтаксического разграничения: оба блока объявляются через def. Единственное различие — наличие return. Функция явно возвращает значение; процедура завершает работу и возвращает None неявно.

Характеристика
Функция
Процедура
Ключевое слово def def
Возвращает значение Да (return) Нет (возвращает None)
Пример def add(a, b): return a + b def greet(): print(«Привет»)

Чем функция отличается от метода

Метод — функция, привязанная к классу. Первый аргумент метода — self (ссылка на объект); вызывается через точку: объект.метод(). Обычная функция независима от класса.

Характеристика
Функция
Метод
Принадлежность Независима Привязана к классу
Первый аргумент Любой self
Вызов имя(аргументы) объект.метод(аргументы)

Синтаксис функции Python: ключевое слово def

def (сокращение от define — «определить») начинает любое объявление функции. После него — имя, скобки с аргументами и двоеточие. Тело функции пишется с отступом в четыре пробела и завершается оператором return.

def имя_функции(аргументы):

# тело функции

return результат

Правила именования: только латиница, цифры и нижнее подчёркивание; имя начинается с буквы; стиль — snake_case (my_function, calculate_total). Соглашение закреплено в руководстве по стилю PEP 8.

Синтаксис функции Python — пример кода с def и return в редакторе

Как объявить пользовательскую функцию в Python

Пошагово: написать def → придумать имя → указать параметры в скобках → поставить двоеточие → написать тело с отступом → вернуть результат через return.

def add(a, b):

result = a + b

return result

Каждая строка важна: a и b — параметры, result — локальная переменная, return передаёт значение вызывающему коду. Частая ошибка начинающих — пропустить отступ. Python реагирует на это IndentationError.

Как вызвать функцию в Python

Вызов функции — имя из объявления плюс скобки с аргументами:

print(add(2, 3)) # 5

print(add(10, 7)) # 17

print(add(0, 100)) # 100

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

Оператор return: возврат значения из функции

return завершает выполнение функции и передаёт значение вызывающему коду. Без него функция неявно возвращает None.

def square(x):

return x * x # возвращает значение

def say_hi():

print(«Привет») # оператора return нет — вернёт None

Ключевое отличие от yield: return завершает функцию полностью, yield — приостанавливает и сохраняет состояние до следующего вызова.

Аргументы и параметры функции в Python

Аргументы Python — примеры кода с args kwargs и позиционными параметрами

Параметр — имя переменной в объявлении: в def f(x) — x это параметр. Аргумент — конкретное значение при вызове: в f(5) — 5 это аргумент. На практике термины часто используют взаимозаменяемо.

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

Позиционные и именованные аргументы

Позиционные аргументы передаются строго по порядку: поменяете местами — получите неверный результат. Именованные (ключевые) указываются как имя=значение — порядок не важен, читаемость выше.

def greet(name, age):

print(f»{name}, {age} лет»)

greet(«Максим», 16) # позиционный

greet(age=16, name=»Максим») # именованный — порядок другой, результат тот же

Значение по умолчанию в функции Python

Параметры по умолчанию не требуют передачи аргумента, если подходит стандартное значение:

def power(base, exp=2):

return base ** exp

power(3) # 9 — exp по умолчанию равен 2

power(3, 3) # 27 — аргумент переопределяет дефолт

Параметры с умолчанием всегда располагаются после обязательных — иначе Python вернёт SyntaxError.

*args и **kwargs: аргументы переменной длины

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

def total(*args):

return sum(args)

total(1, 2, 3, 4) # 10

**kwargs собирает именованные аргументы в словарь:

def show_info(**kwargs):

for key, value in kwargs.items():

print(f»{key}: {value}»)

show_info(name=»Лена», grade=10)

Область видимости переменных: LEGB-правило

LEGB-диаграмма области видимости переменных в Python — вложенные прямоугольники

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

Python ищет переменную по LEGB-правилу: Local → Enclosing → Global → Built-in. Сначала проверяется локальная область функции, затем — объемлющая (если есть вложенная функция), потом — глобальная, наконец — встроенная (имена самого интерпретатора).

Локальная и глобальная область видимости

Локальная переменная объявляется внутри функции и недоступна за её пределами:

def calculate():

result = 42 # локальная переменная

print(result) # NameError: name ‘result’ is not defined

Глобальные переменные объявляются вне функций и видны всей программе. Читать их внутри функции можно напрямую; изменять — только с ключевым словом global.

Ключевые слова global и nonlocal

global разрешает изменить глобальную переменную изнутри функции. nonlocal даёт вложенной функции доступ к переменным объемлющей — именно так строятся замыкания:

def make_counter():

count = 0

def increment():

nonlocal count

count += 1

return count

return increment

counter = make_counter()

counter() # 1

counter() # 2

Замыкания в Python — пример кода с внешней и вложенной функцией

Ребенок хочет изучать программирование? Пусть начнёт с реальных проектов

На курсе школьники создают Telegram-бота, сайт и веб-приложение

  • Бесплатно — 0 ₽ за обучение
  • Портфолио — 4 готовых проекта
  • 7–11 классы — Онлайн, с нуля
Оставить заявку
image

Виды функций в Python

Виды функций Python — обычные, вложенные и lambda в примере кода

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

Встроенные функции Python: 71 готовая функция

71 встроенная функция работает из коробки, без импорта. Они разбиты на шесть тематических групп:

Встроенные функции Python — len, range, print и другие в редакторе кода

Группа
Функции
Назначение
Ввод/Вывод print(), input() Взаимодействие с пользователем
Числа abs(), max(), min(), sum(), round() Арифметические операции
Типы int(), str(), bool(), float() Преобразование типов
Коллекции len(), sorted(), reversed() Работа с коллекциями
Итерация range(), enumerate(), zip(), map(), filter() Обход и фильтрация
Объекты type(), isinstance(), id() Интроспекция объектов

Анонимные lambda-функции в Python

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

Применяется для сортировки с key= и передачи в map()/filter():

nums = [3, 1, 4, 1, 5]

nums.sort(key=lambda x: -x) # сортировка по убыванию

squares = list(map(lambda x: x**2, nums)) # возведение в квадрат

Lambda-функции Python — примеры с map, filter и sorted в коде

Параметр
lambda
def
Синтаксис lambda x: x*2 def f(x): return x*2
Имя Анонимна Именована
Число выражений 1 Без ограничений
Переиспользование Ограничено Полное

Рекурсивные функции: функция вызывает себя

Рекурсивная функция вызывает сама себя для решения подзадач. Обязательны два компонента: базовый случай (условие выхода из рекурсии) и рекурсивный вызов. Без базового случая функция уходит в бесконечный цикл и выбрасывает RecursionError.

def factorial(n):

if n == 0: # базовый случай — выход

return 1

return n * factorial(n — 1) # рекурсивный вызов

Применение: вычисление факториала, чисел Фибоначчи, обход вложенных структур данных.

Рекурсия в Python — сравнение кода с базовым случаем и без него

Функции высшего порядка: map(), filter(), reduce()

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

  • map() — применяет функцию к каждому элементу итерируемого объекта.
  • filter() — отбирает элементы, для которых функция вернула True.
  • reduce() — сворачивает итерируемое до одного значения (из модуля functools).

nums = [1, 2, 3, 4, 5, 6]

evens = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4, 6]

Декораторы Python — синтаксис @decorator и функция-обёртка в редакторе

Генераторные функции и ключевое слово yield

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

def count_up(n):

for i in range(n):

yield i

Главное преимущество генераторов — экономия памяти: элементы создаются по одному, не хранятся все сразу. При исчерпании генератора возникает StopIteration.

Асинхронные функции: async, await и asyncio

async def создаёт корутину (coroutine) — функцию, которую можно приостанавливать. await ожидает результат другой корутины, не блокируя цикл событий (event loop).

import asyncio

async def fetch(url):

await asyncio.sleep(1) # имитация сетевого запроса

return f»Данные из {url}»

asyncio.run(fetch(«https://example.com»))

Для параллельного запуска нескольких корутин используют asyncio.gather(task1(), task2()).

Передача аргументов: по значению или по ссылке

Передача аргументов в Python — изменяемые и неизменяемые типы данных

В Python аргументы передаются по ссылке на объект. Поведение зависит от типа данных.

Неизменяемые типы (int, str, tuple): изменения внутри функции не затрагивают оригинал — создаётся новый объект.

Изменяемые типы (list, dict): изменения внутри функции отражаются на оригинале.

def double(x):

x = x * 2 # создаётся новый объект — оригинал не меняется

num = 5

double(num)

print(num) # 5

def append_zero(lst):

lst.append(0) # изменяет тот же объект в памяти

data = [1, 2, 3]

append_zero(data)

print(data) # [1, 2, 3, 0]

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

Встроенные функции для строк и списков

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

Основные функции для работы со строками

split() разбивает строку по разделителю, join() собирает список строк в одну, replace() заменяет подстроку, upper() и lower() меняют регистр символов.

Функция
Что делает
Пример
split() Разбивает строку «a,b».split(«,») → [«a»,»b»]
join() Объединяет строки «,».join([«a»,»b»]) → «a,b»
replace() Замена подстроки «hi».replace(«i»,»ello») → «hello»
upper() Верхний регистр «text».upper() → «TEXT»

Основные функции для работы со списками

append() добавляет элемент в конец, pop() удаляет последний, sort() сортирует список на месте, len() возвращает длину.

Функция
Что делает
Пример
append() Добавляет элемент в конец [1,2].append(3) → [1,2,3]
pop() Удаляет последний элемент [1,2,3].pop() → 3
sort() Сортирует список [3,1,2].sort() → [1,2,3]
len() Длина списка len([1,2,3]) → 3

Хотите научиться писать функции, создавать Telegram-ботов и веб-приложения с нуля? На курсе «Программирование: Уверенный старт» школьники за 4 недели осваивают Python, HTML/CSS, Flask и Arduino — и создают четыре реальных проекта для портфолио. Подробнее — на странице курса.

Часто задаваемые вопросы

Что вернёт функция в Python, если в ней нет оператора return?

Функция вернёт None — объект типа NoneType. Пример: def greet(): print(«Привет») → result = greet() → result is None вернёт True. Использовать такое возвращаемое значение как число или строку нельзя — это вызовет TypeError.

Можно ли вызвать функцию внутри другой функции в Python?

Да — это вложенная функция. Внутренняя функция имеет доступ к переменным внешней через область Enclosing в правиле LEGB. Для изменения переменной внешней функции используют nonlocal. Типичный паттерн — счётчик вызовов через замыкание: вложенная функция захватывает переменную и помнит её значение между вызовами.

В чём разница между параметром и аргументом функции?

Параметр — имя переменной в объявлении: в def f(x) — x это параметр. Аргумент — конкретное значение при вызове: в f(5) — 5 это аргумент. На практике термины используют взаимозаменяемо, и это не считается грубой ошибкой.

Когда использовать lambda, а когда def?

lambda подходит для маленькой функции из одного выражения, которая нужна однократно: как аргумент key= в sort() или внутри map()/filter(). def выбирают, если функция вызывается многократно, содержит несколько строк или требует документирования через строку документации (docstring).

Чем генераторная функция лучше обычного списка при обработке данных?

Генератор не хранит все элементы в памяти одновременно — создаёт их по одному при каждом вызове next(). При обработке миллионов записей это критически снижает потребление памяти. Когда элементы заканчиваются, генератор выбрасывает StopIteration.

Есть ли в Python ограничение на глубину рекурсии?

Да. По умолчанию Python допускает около 1000 уровней рекурсии. При превышении возникает RecursionError: maximum recursion depth exceeded. Лимит можно изменить через sys.setrecursionlimit(), но лучше заменить глубокую рекурсию итеративным решением — оно надёжнее и быстрее.

Что такое *args в функции Python и как им пользоваться?

*args позволяет передать произвольное количество позиционных аргументов. Все они собираются в кортеж и доступны по имени args. Пример: def total(*args): return sum(args) → total(1, 2, 3, 4) вернёт 10. Имя args — соглашение; технически можно написать иначе, например *numbers.

Как написать и запустить асинхронную функцию в Python?

Объявляйте через async def, внутри используйте await перед асинхронными операциями. Запуск: asyncio.run(main()). Для параллельного выполнения нескольких корутин — await asyncio.gather(task1(), task2()). Модуль asyncio импортируется в начале файла стандартной строкой import asyncio.

Пусть ребёнок сделает первый IT-проект уже в этом месяце

Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио

  • Онлайн
  • 4 недели
  • Бесплатно
  • Школьникам 7–11 классов
Подать заявку
icon