Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top