> If you create a closure, using a memoization technique as per the original > post, and then call type() on that closure, Python reports <type 'function'>.
Because it is. The closure is only sort of an extension to the locals() available to that function. Not more, not less. > > If you use dir() on that closure-that-Python-calls-a-function, it tells > you that there is an attribute "func_closure". But ordinary functions that > aren't closures also have that attribute. Because there is no difference between them - a function _can_ have a closure, the same way a HttpRequest _can_ have POST-data or not. That doesn't make it different. You are of course right that one _could_ have implemented this with different classes. But as it happens, it isn't. > > According to my tests, ordinary functions have None as the func_closure > attribute, but I don't know if that will always be the case, or just the > few examples I tested it. With a sample size of three, I have no > confidence that I've found a bullet-proof test. See this small testscript how to expose the closures content -- however I'm not familiar with the mechanics the bind "some_variable" to the cell-objects content. But actually I don't care... def closure_test(): some_variable = {} print "%x" % id(some_variable) def get(x): return some_variable[x] def set(x,v): some_variable[x] = v return get, set g, s = closure_test() s(10, 20) print g(10) print s.func_closure[0] Diez -- http://mail.python.org/mailman/listinfo/python-list