Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Присвоение функции переменной в Python
Да, в Python это не просто возможно — это один из ключевых принципов языка. Функции — это объекты первого класса (first-class objects), и их можно обрабатывать как любые другие данные.
Базовый пример
def greet(name):
return f"Hello, {name}!"
# Присваиваем функцию переменной
say_hello = greet
# Вызываем через переменную
print(say_hello("Alice")) # Output: Hello, Alice!
# Обе переменные указывают на один объект
print(greet is say_hello) # Output: True
Практические применения
1. Передача функций как аргументов
def apply_operation(x, y, operation):
return operation(x, y)
def add(a, b):
return a + b
def multiply(a, b):
return a * b
print(apply_operation(5, 3, add)) # 8
print(apply_operation(5, 3, multiply)) # 15
2. Возврат функций из функций
def create_multiplier(factor):
def multiply(x):
return x * factor
return multiply
# Создаём новые функции
times_two = create_multiplier(2)
times_three = create_multiplier(3)
print(times_two(5)) # 10
print(times_three(5)) # 15
3. Функции в структурах данных
# Функции в словаре
operations = {
'add': lambda x, y: x + y,
'sub': lambda x, y: x - y,
'mul': lambda x, y: x * y,
}
print(operations['add'](10, 5)) # 15
# Функции в списке
functions = [int, str, len]
print(functions[0]("42")) # 42
print(functions[1](100)) # '100'
Lambda и анонимные функции
# Lambda функция в переменной
square = lambda x: x ** 2
print(square(4)) # 16
# Использование с map, filter, sorted
numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x ** 2, numbers))
print(result) # [1, 4, 9, 16, 25]
# Фильтрация
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even) # [2, 4]
Декораторы — практический пример
Декораторы используют это свойство для оборачивания функций:
def log_calls(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__}")
result = func(*args, **kwargs)
print(f"Result: {result}")
return result
return wrapper
@log_calls
def add(a, b):
return a + b
add(5, 3) # Выведет логи до и после вызова
Важные свойства функций
def example(x, y=10):
return x + y
# Функция как объект имеет атрибуты
print(example.__name__) # 'example'
print(example.__doc__) # Документация
print(example.__code__) # Код функции
print(type(example)) # <class 'function'>
# Можно добавлять собственные атрибуты
example.custom_attr = "value"
print(example.custom_attr) # 'value'
Замыкания (Closures)
def make_counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter = make_counter()
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
Заключение
Присвоение функции переменной — это фундаментальная особенность Python, которая делает язык очень гибким. Это основа функционального программирования и используется повсеместно в декораторах, обработчиках событий и callback'ах.