A string identifier is attached to every function at creation time
- Which is nice for debug:
>>> dance.__name__
'dance'
Functions capture local state
- Just like JavaScript, (lexical) closure:
- A closure remembers the values from its enclosing scope when it was created
To check whether something is callable
- Objects can be made callable, by being assigned function as value
- So, to check whether an object is callable:
>>> callable(foo)
True/False
Benefit of functions being first class
- We are able to abstract and pass around behaviours