__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
насколько я вижу, не документированы. Я думаю, они связаны с закрытием.