Extending and Embedding the Python Interpreter(四)

3587 ワード

I promised to show how spam_system() is called from Python programs. First, we need to list its name and address in a ``method table'':
 
Note the third entry ("METH_VARARGS"). This is a flag telling the interpreter the calling convention to be used for the C function. It should normally always be "METH_VARARGS"or "METH_VARARGS | METH_KEYWORDS"; a value of 0 means that an obsolete variant of PyArg_ParseTuple() is used.
python関数でspamを呼び出す方法を見てみましょうsystem().まず、spam_をメソッドテーブルにリストする必要があります.システム()の名前とアドレス.3番目のパラメータ(「METH_VARRGS」)は、同志コンパイラがCコード関数を呼び出す必要があるタグであることに注意してください.通常、このパラメータは「METH_VARRGS」または「METH_VARRGS|METH_KEYWORDS」と書く.
When using only "METH_VARARGS", the function should expect the Python-level parameters to be passed in as a tuple acceptable for parsing via PyArg_ParseTuple(); more information on this function is provided below.
「METH_VARRGS」のみをパラメータとして使用する場合、関数はPyArg_ParseTuple()関数はpythonに入力されたパラメータを解析します.
The METH_KEYWORDS bit may be set in the third field if keyword arguments should be passed to the function. In this case, the C function should accept a third "PyObject *"parameter which will be a dictionary of keywords. Use PyArg_ParseTupleAndKeywords() to parse the arguments to such a function.
3番目のパラメータにMETH_を入れるとKEYWORDSの場合、関数パラメータにキーワードパラメータを入力する必要があります.この場合、このC関数は、3番目のパラメータとしてPyObjectポインタパラメータを受け入れる必要があります.PyArg_の使用ParseTupleAndKeywords()はこの関数のパラメータを解析する.
The method table must be passed to the interpreter in the module's initialization function. The initialization function must be named initname(), where name is the name of the module, and should be the only non-static item defined in the module file:
この方の発表はモジュールの初期化関数に解析器に伝達されなければならない.この初期化関数はinitname()と命名されなければなりません.ここでnameはこのモジュールの名前であり、この関数はこのモジュールファイル内の唯一の非静的要素であるべきです.
 
Note that PyMODINIT_FUNC declares the function as void return type, declares any special linkage declarations required by the platform, and for C++ declares the function as extern "C" .
注意PyMODINIT_FNCはこの関数に戻り値がないと宣言した.
When the Python program imports module spam for the first time, initspam() is called. (See below for comments about embedding Python.) It calls Py_InitModule(), which creates a ``module object'' (which is inserted in the dictionary sys.modules under the key "spam" ), and inserts built-in function objects into the newly created module based upon the table (an array of PyMethodDef structures) that was passed as its second argument. Py_InitModule() returns a pointer to the module object that it creates (which is unused here). It aborts with a fatal error if the module could not be initialized satisfactorily, so the caller doesn't need to check for errors.
pythonプログラムがspamモジュールを初めてインポートするとinitspam()関数が呼び出されます.Pyと呼ばれていますInitModule()は、sysモジュールの辞書に挿入され、spamをキーワードとして使用されるモジュールオブジェクトを作成し、メソッドマッピングテーブルに基づいて新しく作成されたモジュールオブジェクトにメソッドを追加します.Py_InitModule()は、モジュールオブジェクトへのポインタを返します.モジュールが満足に初期化できない場合、この関数はfatal errorを生成してプログラムを中止するので、関数の呼び出し者はエラーをチェックする必要はありません.
When embedding Python, the initspam() function is not called automatically unless there's an entry in the _PyImport_Inittab table. The easiest way to handle this is to statically initialize your statically-linked modules by directly calling initspam() after the call to Py_Initialize():
Cコードにpythonを埋め込むとinitspam()関数は自動的に実行されず、最も簡単な方法はPy_を呼び出すことです.Initialize()関数は、次のプログラムのようにinitspam()関数を直接呼び出します.