Appendix A. Callbacks
The concept of callbacks and passing functions around may be foreign to you. If so, it is definitely worth digging into so that you understand it well enough to use it, or at the very least, understand what is going on when you see it being used. In Python, functions are “first class,” which means that you can pass them around and treat them as objects—because they really are objects. See Example A-1.
Example A-1. Showing functions as first class
In [1]: def foo(): ...: print foo ...: ...: In [2]: foo Out[2]: <function foo at 0x1233270> In [3]: type(foo) Out[3]: <type 'function'> In [4]: dir(foo) Out[4]: ['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
Simply referring to a function, such as foo in the previous example, does not call it.
Referring to a function’s name lets you get at any attributes the function
has and to even refer to the function by a different name later. See Example A-2.
Example A-2. Referring to functions by name
In [1]: def foo(): ...: """this is a docstring""" ...: print "IN FUNCTION FOO" ...: ...: In [2]: foo Out[2]: <function foo at 0x8319534> In [3]: foo.__doc__ Out[3]: 'this is a docstring' In [4]: bar = foo In [5]: bar Out[5]: <function foo at 0x8319534> In [6]: ...