Мне нужно __closure__ - PullRequest
       11

Мне нужно __closure__

7 голосов
/ 23 октября 2009

Я только что проверил эту очень интересную карту ума:

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

И мне было интересно, что означают некоторые из новых, например __code__ и __closure__. Я погуглил вокруг, но ничего конкретного. Кто-нибудь знает?

Ответы [ 4 ]

7 голосов
/ 23 октября 2009

С Что нового в Python 3.0

Атрибуты функции с именем func_X были переименованы для использования формы __X__, освобождая эти имена в пространстве имен атрибута функции для пользовательских атрибутов. func_closure, func_code, func_defaults, func_dict, func_doc, func_globals, func_name были переименованы в __closure__, __code__, __defaults__, __dict__, __doc__, __globals__, __name__ соответственно.

По сути, все те же старые вещи Python 2, причудливое новое имя Python 3000.

Подробнее о большинстве из них можно узнать в PEP 232

6 голосов
/ 23 октября 2009

У вас фактически есть аналогичные поля в 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'>]

Редактировать: Для более подробной информации о значении этих конструкций, пожалуйста, прочитайте о "пользовательских функциях" и "объектах кода" , объясненных в главе Модель данных в Справочнике по Python.

4 голосов
/ 23 октября 2009

Раньше их называли

func_closure (now __closure__), func_code (now __code__)

(это должно помочь в поиске).

Краткое объяснение отсюда ниже.

  • func_closure: ни один, или кортеж ячеек, которые содержат привязки для свободных переменных функции (только для чтения)
  • func_code: объект кода представляет скомпилированную функцию тело (доступное для записи)
0 голосов
/ 23 октября 2009

Это специальные методы Python .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...