← Все вопросы
Можно ли в Python присвоить функцию переменной?
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
Да.
Ваш ответ
Войдите, чтобы ответить на вопрос.