-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 に答える