コードオブジェクトのデフォルト__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
は、わかり得る限り文書化されていません。彼らは閉鎖に関連しています、私は思います。
所属していません StackOverflow