Скобки объектного кода (новичок)

Почему я должен добавить () в конце 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?). Требуя ()эти проблемы не возникают

Другие вопросы по тегам