Скобки объектного кода (новичок)
Почему я должен добавить () в конце f в этом примере?
def do_twice(f):
f()
f()
def print_spam():
print 'spam'
do_twice(print_spam)
spam
spam
Это потому, что функциональные объекты требуют определенного аргумента для функций?
2 ответа
Почему я должен добавить () в конце f в этом примере?
Так как f
это функция, и f()
на самом деле вызывает функцию. В вашем примере do_twice(print_spam)
отправляет do_twice
функционировать фактический print_spam
функция, а не ее результат. Если бы вы использовали do_twice(print_spam())
, do_twice
функция получила бы print_spam
возвращаемое значение, которое является None
Это решение языка, Python требует, чтобы все вызовы функций имели ()
сделать вещи однозначными. Возьмите эти несколько примеров,
a = b
Если б была функция, было бы неоднозначно, что a
бы получает (объект функции b или результат вызова b?).
a( b )
что бы a
Получать? (функция b или результат вызова b?). Требуя ()
эти проблемы не возникают