質問

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_freevarsco_cellvarsは、わかり得る限り文書化されていません。彼らは閉鎖に関連しています、私は思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top