← Все вопросы

Можно ли в Python присвоить функцию переменной?

Задан 3 месяца назад821 просмотров3 ответа
15

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

3 ответа

24
✓ Принятый ответ — помог автору

Да, в Python функции — это объекты первого класса (first-class). Их можно присваивать переменным, складывать в списки/словари, передавать в другие функции и возвращать из них.

Главное — без скобок. Со скобками ты ВЫЗЫВАЕШЬ функцию, без скобок — берёшь саму функцию как объект:

def hello():
    print('Привет')

f = hello     # без скобок — присваиваем функцию
f()           # Привет — вызываем через новое имя

print(hello)  # <function hello at 0x...>

Именно поэтому работает sorted(data, key=len) — мы передаём функцию len как значение.

Михаил Попов вот почему key=len без скобок! дошло · 2 месяца назад
9

Да, функции в Python — обычные объекты. f = hello (без скобок), потом f().

5

Да.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект