-1

我在 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.

这显然不是很丰富。这些输入中的每一个都期望什么类型,这些值有什么作用?注意:我出于学术好奇心提出这个问题,而不是出于任何特定的编码目的。

4

1 回答 1

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我认为它们与关闭有关。

于 2016-08-13T03:24:47.957 回答