views:

331

answers:

4
+2  Q: 

I need __closure__

I just checked out this very interesting mindmap:

http://www.mindmeister.com/10510492/python-underscore

And I was wondering what some of the new ones mean, like __code__ and __closure__. I googled around but nothing concrete. Does anyone know?

+5  A: 

From What's New in Python 3.0

The function attributes named func_X have been renamed to use the __X__ form, freeing up these names in the function attribute namespace for user-defined attributes. To wit, func_closure, func_code, func_defaults, func_dict, func_doc, func_globals, func_name were renamed to __closure__, __code__, __defaults__, __dict__, __doc__, __globals__, __name__, respectively.

Basically, same old Python 2 stuff, fancy new Python 3000 name.

You can learn more about most of these in PEP 232

Jack Lloyd
Where do I read about `func_closure`?
cool-RR
@cool-RR Just try it interactively, it's all very simple.
Andrey Vlasovskikh
I did try, didn't understand.
cool-RR
See the link in my answer for more details on the meaning.
Andrey Vlasovskikh
A: 

These are pythons special methods.

egon
+2  A: 

They used to be called

func_closure (now __closure__), func_code (now __code__)

(that should help googling).

A short explanation from here below.

  • func_closure: None or a tuple of cells that contain bindings for the function’s free variables (read-only)
  • func_code: The code object representing the compiled function body (writable)
ChristopheD
+2  A: 

You actually have analogous fields in CPython 2.x:

>>> first = lambda x: lambda y: x
>>> f = first(2)
>>> type(f.func_code)
<type 'code'>
>>> map(type, f.func_closure)
[<type 'cell'>]

Edit: For more details on the meaning of these constructs please read about "user defined functions" and "code objects" explained in the Data Model chapter of the Python Reference.

Andrey Vlasovskikh