по умолчанию __init__ для объектов кода
-
02-01-2020 - |
Вопрос
Я нашел объекты кода в 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.
Это явно не очень информативно.Какие типы ожидаются от каждого из этих входных данных и что делают значения? ПРИМЕЧАНИЕ: Я задал этот вопрос из академического любопытства, а не для какой-то конкретной цели кодирования.
Решение
Объект кода 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
насколько я вижу, не задокументированы.Я думаю, они связаны с замыканиями.