0Pricing
Python Academy · Урок

Функции как объекты первого класса

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

«Функции как объекты первого класса» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

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

Функции — это объекты

def double(x): return x*2 создаёт объект-функцию. double — всего лишь имя. Ему можно присвоить другое имя: fn = double; вызов fn(5) сработает.
def double(x): return x * 2
fn = double
print(fn(5))
print(type(fn))

Передача функций как аргументов

def apply(func, val): return func(val) — func является вызываемым аргументом. Это программирование более высокого порядка.
def apply(func, val): return func(val)
print(apply(abs, -7))
print(apply(str, 42))

Хранение функций в контейнерах

ops = [add, sub, mul] хранит объекты-функции в списке. Перебирайте их и вызывайте: for op in ops: op(a, b).
ops = [str.upper, str.lower, str.strip]
for op in ops:
    print(op('  Hello  '))

Возврат функций

Функция может возвращать другую функцию. def make_adder(n): def adder(x): return x+n; return adder
def make_adder(n):
    def adder(x): return x + n
    return adder
add10 = make_adder(10)
print(add10(5), add10(20))

Замыкания

Замыкание захватывает переменные из внешней области видимости. Внутренняя функция «замыкает» переменную n из make_adder.
def counter(start=0):
    count = [start]
    def inc():
        count[0] += 1
        return count[0]
    return inc
c = counter()
print(c(), c(), c())

Лямбда как анонимная функция

lambda x: x*2 — это анонимная функция с одним выражением. Она полезна для коротких функций обратного вызова, но если логика нетривиальна, задайте функции имя.
nums = [3, 1, 4, 1, 5]
print(sorted(nums, key=lambda x: -x))

map() и filter()

map(func, iterable) применяет func к каждому элементу. filter(pred, iterable) оставляет элементы, для которых pred равно True.
nums = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, nums)))
print(list(filter(lambda x: x%2==0, nums)))

functools.reduce()

reduce(func, seq) сворачивает последовательность: reduce(lambda a,b: a+b, [1,2,3,4]) возвращает 10.
from functools import reduce
print(reduce(lambda a,b: a*b, [1,2,3,4,5]))

Проверка вызываемости

callable(obj) возвращает True, если obj можно вызвать. Функции, классы и объекты с __call__ являются вызываемыми.
print(callable(print))
print(callable(42))
class C:
    def __call__(self): pass
print(callable(C()))

Интроспекция функций

func.__name__, func.__doc__, func.__annotations__, inspect.signature(func) предоставляют метаданные о функции.
import inspect
def greet(name: str) -> str:
    '''Returns a greeting.'''
    return f'Hi {name}'
print(greet.__name__, greet.__annotations__)
print(inspect.signature(greet))

Быстрая проверка

Что такое замыкание в Python?

Итоги

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

Продолжайте

Отличный прогресс! Продолжайте, чтобы освоить следующую концепцию.

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

Урок «Функции как объекты первого класса» бесплатный?

Да — полный текст урока «Функции как объекты первого класса» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Функции как объекты первого класса»?

Разберитесь в замыканиях и передаче функций в качестве аргументов. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Функции как объекты первого класса»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Функции как объекты первого класса
  2. Написание пользовательских декораторов
  3. Декоратор @property
  4. @classmethod и @staticmethod
← Назад к Python Academy