__init__ по умолчанию для объектов кода

Я нашел объекты кода в Python. Мне любопытно, что делает каждая из переменных в конструкторах. В встроенной справочной функции не так много информации о них:

 class code(object)
 |  code(argcount, nlocals, stacksize, flags, codestring, constants, names,
 |        varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])
 |  
 |  Create a code object.  Not for the faint of heart.

Это, очевидно, не очень информативно. Какие типы ожидают каждый из этих входных данных, и что делают значения? ПРИМЕЧАНИЕ: я задал этот вопрос из академического любопытства, а не для какой-либо конкретной цели кодирования.

1 ответ

Решение

Объект кода Python - это в основном просто контейнер для его атрибутов. Каждый из аргументов, которые вы видите для конструктора, становится атрибутом с co_ префикс (например, argcount аргумент становится co_argcount атрибуты).

Конструктор выполняет небольшую проверку, поэтому, если аргументы имеют неправильный тип, он сразу вызовет исключение (а не только при последующем использовании объекта кода).

Что касается значения аргументов и атрибутов, это в основном задокументировано в большой таблице в документации для inspect модуль. Вот соответствующая часть:

code  co_argcount     number of arguments (not including * or ** args)   
      co_code         string of raw compiled bytecode    
      co_consts       tuple of constants used in the bytecode    
      co_filename     name of file in which this code object was created     
      co_firstlineno  number of first line in Python source code     
      co_flags        bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg   
      co_lnotab       encoded mapping of line numbers to bytecode indices    
      co_name         name with which this code object was defined   
      co_names        tuple of names of local variables      
      co_nlocals      number of local variables      
      co_stacksize    virtual machine stack space required   
      co_varnames     tuple of names of arguments and local variables

Атрибуты co_freevars а также co_cellvars насколько я вижу, не документированы. Я думаю, они связаны с закрытием.

Другие вопросы по тегам