Function objects are created by function definitions. The only
operation on a function object is to call it:
There are really two flavors of function objects: built-in functions and user-defined functions. Both support the same operation (to call the function), but the implementation is different, hence the different object types.
The implementation adds two special read-only attributes:
f.func_code is a function's code
object (see below) and
the dictionary used as the function's global namespace (this is the
m.__dict__ where m is the module in which
the function f was defined).
Function objects also support getting and setting arbitrary attributes, which can be used to, e.g. attach metadata to functions. Regular attribute dot-notation is used to get and set such attributes. Note that the current implementation only supports function attributes on user-defined functions. Function attributes on built-in functions may be supported in the future.
Functions have another special attribute
f.func_dict) which contains the namespace used to
support function attributes.
be accessed directly or set to a dictionary object. A function's
dictionary cannot be deleted.
See About this document... for information on suggesting changes.