Earlier quoted context omitted.
Python is often claimed not to have closures but that isn't really true, what it doesn't have is anonymous functions. It does have a lambda statement, but that is limited to a single statement. So what you end up writing is more akin to: def multiplier_maker(a): def temp(b): return b * a return temp That is because Python allows you to declare a function anyware, even inside other functions.
And if you want to emulate static variables in a function, you can do that: def counter(): counter.x += 1 return counter.x counter.x = 0 counter() > 1 counter() > 2 Beware! singleton variables, mutable state, etc.
>>> def counter():
... x = [ 1 ]
... def count():
... y = x[ 0 ]
... x[ 0 ] += 1
... return y
... return count
...
>>> count = counter()
>>> count()
1
>>> count()
2
>>> count()
3
>>> count()
4
>>>
>>> otherCount = counter()
>>> otherCount()
1
>>> otherCount()
2
>>> count()
5
>>> count()
6
>>> otherCount()
3
>>>