Ram Rachum
Ram Rachum

Reputation: 88708

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?

Upvotes: 7

Views: 2448

Answers (4)

Egon
Egon

Reputation: 1705

These are Python's special methods.

Upvotes: 0

Andrey Vlasovskikh
Andrey Vlasovskikh

Reputation: 16848

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.

Upvotes: 6

ChristopheD
ChristopheD

Reputation: 116267

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)

Upvotes: 4

Jack Lloyd
Jack Lloyd

Reputation: 8405

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

Upvotes: 7

Related Questions