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> ...

Get Python for Unix and Linux System Administration now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.