Скобки объектного кода (новичок) - PullRequest
0 голосов
/ 18 марта 2012

Почему я должен добавить () в конце f в этом примере?

def do_twice(f):
    f()
    f()

def print_spam():
    print 'spam'

do_twice(print_spam)
spam
spam

Это потому, что объектам функций требуется заданный аргумент для функций?

Ответы [ 2 ]

4 голосов
/ 18 марта 2012

Почему я должен добавить () в конце f в этом примере?

Поскольку f является функцией, а f() фактически вызывает функцию.В вашем примере do_twice(print_spam) отправляет функции do_twice фактическую функцию print_spam, а не ее результат.Если бы вы использовали do_twice(print_spam()), функция do_twice получила бы возвращаемое значение print_spam, равное None

0 голосов
/ 18 марта 2012

Это языковое решение, python требует, чтобы все вызовы функций имели (), чтобы сделать вещи однозначными. Возьмите эти несколько примеров,

 a = b

Если бы b была функцией, то было бы неоднозначно, что получит a (объект функции b или результат вызова b?).

 a( b )

что бы a получил? (функция b или результат вызова b?). Требуя (), эти проблемы не возникают

...