Codebra
29 января 2026 в 18:34

Урок 55. Итоги раздела «Функции в Python»

В этом уроке подведем итоги раздела «Функции в Python» курса по Python.
📝

Внимание! На этой странице вы найдете материал урока из архивного курса по Python. Курс был написан в 2024 году и по-прежнему актуален для начинающих разработчиков.

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

Полный список уроков доступен по тегу Архивный курс по Python и на странице первого урока.

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

Краткий пересказ раздела «Функции в Python»

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

💡 Отличие понятий «аргумент» и «параметр»

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

💡 Полиморфизм

Полиморфизм – это способность функции обрабатывать данные различных типов.

Далее познакомились с правилом LEGB (Local, Enclosed, Global, Built-in) и областью видимости переменных. Узнали для чего используется оператор global.

Потом попробовали разобраться со сложной темой - замыкания. В этом же уроке поговорили об операторе nonlocal.

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

Затем научились создавать функции без имени - анонимные функции (lambda). Немного поговорили о функциональном программировании и функциях map(), filter() и reduce().

Завершили раздел генераторными функциями и генераторными выражениями. Научились использовать оператор yield.

Новая информация из раздела «Функции в Python»

Функция в Python создается с помощью оператора def:

def имя_функции(арг_1, арг_2, … арг_N):
    операторы

Для возврата из функции используется оператор return:

def mult(x, y):
    return x * y

print(mult(4, 6)) # => 24

Чтобы сделать переменную глобальной, используйте оператор global. Но использовать его нужно правильно. Если забыли, вернитесь к уроку.

Вспомним один из примеров про замыкания и оператор nonlocal. Обязательно вернитесь к уроку и запустите все примеры еще раз:

def up(num1):
    a = num1
    def inner():
        nonlocal a
        a -= 1
        return a
    return inner

up_one = up(10)
print(up_one()) # => 9
print(up_one()) # => 8
print(up_one()) # => 7
print(up_one()) # => 6

Операторы * и ** используются не только для умножения и возведения в степень (такие операторы называются инфиксные). Вспомним пример распаковки итерируемого объекта в аргументы функции с помощью оператора *:

def sum(a, b):
    print(a + b)

a = (3, 4)
sum(*a)

И вспомним распаковку словаря с помощью оператора ** в аргументы функции:

def sum(a, b):
    print(a) # => 5
    print(b) # => 4
    print(a + b) # => 9

a = {"b": 4, "a": 5}
sum(**a)

Синтаксис lambda выражений следующий:

lambda арг1, арг2, … аргN : выражение
f = lambda a, b : a + b
print(f(3, 2)) # => 5

Функциональное программирование держится на трех функциях:

  • map() - применяет функции к элементам итерируемого объекта.
  • filter() - фильтрует элементы на основе проверяемой функции.
  • reduce() - применяет функции к парам элементов и результатов выполнения.

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

def square(N):
    for i in range(1, N):
        yield i * i

result = square(1000000)

print(next(result)) # => 1
print(next(result)) # => 4
print(next(result)) # => 9

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

result = (x for x in result if x[1] >= 18)

Главное отличие от спискового включения — это то, что будет храниться в памяти после выполнения. Списковые включения (list comprehensions) после выполнения сохраняют в памяти весь генерируемый список, в свою очередь, генераторное выражение (generator expression) сохраняет в память только объект-генератор, с которым в дальнейшем можно работать по необходимости.

Заключение

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

📝

Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу Python.