2013-03-29 2 views
-1

В настоящее время я изучаю python, используя «Think Python», в котором я прошел через определенный фрагмент кода, как показано ниже, и я начинаю программист, я не понимаю, как это работает, объясните мне, код ниже, а также различные концепции, стоящие за ним.Confused with function-object usage in Python

excercise: Функциональный объект - это значение, которое вы можете присвоить переменной или передать в качестве аргумента. Для Например, do_twice это функция, которая принимает объект функции в качестве аргумента и вызывает его дважды:

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

# Here’s an example that uses do_twice to call a function named print_spam twice. 

def print_spam(): 
    print 'spam' 

do_twice(print_spam) 

этот код дает о/р, как спам спам я не знаю, как и я хочу более глубокое объяснение с эта концепция

+2

Что вы хотите сказать? Что вы не понимаете? – BrenBarn

ответ

3

Функции Python являются первоклассными объектами. Как и другие объекты, они могут быть привязаны к переменным и передаваться.

>>> def print_spam(): 
...  print 'spam' 
... 
>>> print_spam 
<function print_spam at 0x105722ed8> 
>>> type(print_spam) 
<type 'function'> 
>>> another_name = print_spam 
>>> another_name 
<function print_spam at 0x105722ed8> 
>>> another_name is print_spam 
True 
>>> another_name() 
spam 

В приведенном выше примере сеанса я играть вокруг с объектом print_spam функции, назначив ее another_name, то применение его с помощью этой другой переменной.

Все, что код, который вы указали из Think Python, передается print_spam в качестве параметра функции do_twice, который вызывает его параметр f дважды.

+0

все еще неясно, почему и как они это используют f() –

+0

'f' является параметром функции' do_twice() '. Предоставляя этой функции ссылку на другую функцию, 'f' становится ссылкой на эту другую функцию. Добавление '()' затем вызывает ссылочную функцию. –

+0

Я, наконец, понял. print_spam = F и внутри do_twice F() = print_spam() Благодаря Martijn Pieters –