引数の解析と値の構築—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/c-api/arg
移動先:案内検索

引数の解析と値の構築

これらの関数は、独自の拡張関数とメソッドを作成するときに役立ちます。 追加情報と例は、 Pythonインタープリターの拡張と埋め込みにあります。

説明されているこれらの関数の最初の3つ、 PyArg_ParseTuple()PyArg_ParseTupleAndKeywords()、および PyArg_Parse()は、すべて形式の文字列を使用します。期待される引数について関数に伝えるために使用されます。 フォーマット文字列は、これらの各関数に同じ構文を使用します。

引数の解析

フォーマット文字列は、0個以上の「フォーマット単位」で構成されます。 フォーマットユニットは、1つのPythonオブジェクトを記述します。 これは通常、単一の文字または括弧で囲まれたフォーマット単位のシーケンスです。 いくつかの例外を除いて、括弧で囲まれたシーケンスではないフォーマット単位は、通常、これらの関数の単一のアドレス引数に対応します。 以下の説明では、引用符で囲まれた形式がフォーマット単位です。 (丸)括弧内のエントリは、フォーマット単位に一致するPythonオブジェクトタイプです。 [角かっこ]内のエントリは、アドレスを渡す必要があるC変数のタイプです。

文字列とバッファ

これらの形式では、メモリの連続したチャンクとしてオブジェクトにアクセスできます。 返されたUnicodeまたはバイト領域にrawストレージを提供する必要はありません。

一般に、フォーマットがバッファーへのポインターを設定する場合、バッファーは対応するPythonオブジェクトによって管理され、バッファーはこのオブジェクトの存続期間を共有します。 自分でメモリを解放する必要はありません。 唯一の例外は、eses#et、およびet#です。

ただし、 Py_buffer 構造がいっぱいになると、基になるバッファーがロックされるため、呼び出し元は Py_BEGIN_ALLOW_THREADS ブロック内でも、可変データのサイズ変更や破棄のリスクなしにバッファーを使用できます。 。 その結果、は、データの処理が終了した後(または早期中止の場合)に PyBuffer_Release()を呼び出す必要があります。

特に明記されていない限り、バッファはNULで終了しません。

一部の形式では、読み取り専用のバイトのようなオブジェクトが必要であり、バッファー構造の代わりにポインターを設定します。 これらは、オブジェクトの PyBufferProcs.bf_releasebuffer フィールドがNULLであることを確認することで機能します。これにより、 bytearray などの可変オブジェクトが許可されなくなります。

ノート

フォーマットのすべての#バリアント(s#y#など)の場合、長さ引数のタイプ(intまたはPy_ssize_t)は、次のように定義することによって制御されます。 Python.hを含める前のマクロPY_SSIZE_T_CLEAN。 マクロが定義されている場合、長さは int ではなくPy_ssize_tです。 この動作は、将来のPythonバージョンで変更され、Py_ssize_tのみをサポートし、 int のサポートを終了します。 常にPY_SSIZE_T_CLEANを定義することをお勧めします。


sstr )[const char *]

Unicodeオブジェクトを文字列へのCポインタに変換します。 既存の文字列へのポインタは、アドレスを渡す文字ポインタ変数に格納されます。 C文字列はNULで終了します。 Python文字列には、埋め込まれたnullコードポイントを含めることはできません。 含まれている場合、 ValueError 例外が発生します。 Unicodeオブジェクトは、'utf-8'エンコーディングを使用してC文字列に変換されます。 この変換が失敗すると、 UnicodeError が発生します。

ノート

この形式は、バイトのようなオブジェクトを受け入れません。 ファイルシステムパスを受け入れてC文字列に変換する場合は、 PyUnicode_FSConverter()コンバーターとしてO&形式を使用することをお勧めします。

バージョン3.5で変更:以前は、Python文字列に埋め込まれたnullコードポイントが検出されたときに TypeError が発生していました。

s*str またはバイトのようなオブジェクト)[Py_buffer]

この形式は、Unicodeオブジェクトとバイトのようなオブジェクトを受け入れます。 これは、呼び出し元によって提供された Py_buffer 構造体を埋めます。 この場合、結果のC文字列にはNULバイトが埋め込まれている可能性があります。 Unicodeオブジェクトは、'utf-8'エンコーディングを使用してC文字列に変換されます。

s#str 、読み取り専用バイトのようなオブジェクト)[const char *、intまたはPy_ssize_t]

s*と同様ですが、可変オブジェクトを受け入れない点が異なります。 結果は2つのC変数に格納されます。最初の変数はC文字列へのポインタであり、2番目の変数はその長さです。 文字列にはヌルバイトが埋め込まれている場合があります。 Unicodeオブジェクトは、'utf-8'エンコーディングを使用してC文字列に変換されます。

zstr またはNone)[const char *]

sと同様ですが、PythonオブジェクトがNoneの場合もあります。その場合、CポインターはNULLに設定されます。

z*strバイトのようなオブジェクトまたはNone)[Py_buffer]

s*と同様ですが、PythonオブジェクトがNoneの場合もあります。その場合、 Py_buffer 構造体のbufメンバーは [に設定されます。 X146X]。

z#str 、読み取り専用バイトのようなオブジェクトまたはNone)[const char *、intまたはPy_ssize_t]

s#と同様ですが、PythonオブジェクトがNoneの場合もあります。その場合、CポインターはNULLに設定されます。

y(読み取り専用バイトのようなオブジェクト)[const char *]

この形式は、バイトのようなオブジェクトを文字列へのCポインタに変換します。 Unicodeオブジェクトは受け入れません。 バイトバッファには、埋め込まれたnullバイトを含めることはできません。 含まれている場合、 ValueError 例外が発生します。

バージョン3.5で変更:以前は、バイトバッファーで埋め込みヌルバイトが検出されたときに TypeError が発生していました。

y*バイトのようなオブジェクト)[Py_buffer]

s*のこのバリアントは、Unicodeオブジェクトを受け入れず、バイトのようなオブジェクトのみを受け入れます。 これはバイナリデータを受け入れるための推奨される方法です。

y#(読み取り専用バイトのようなオブジェクト)[const char *、intまたはPy_ssize_t]

s#のこのバリアントは、Unicodeオブジェクトを受け入れず、バイトのようなオブジェクトのみを受け入れます。

Sbytes )[PyBytesObject *]

変換を試行せずに、Pythonオブジェクトが bytes オブジェクトである必要があります。 オブジェクトがバイトオブジェクトでない場合、 TypeError を発生させます。 C変数は、 PyObject * として宣言することもできます。

Ybytearray )[PyByteArrayObject *]

変換を試行せずに、Pythonオブジェクトが bytearray オブジェクトである必要があります。 オブジェクトが bytearray オブジェクトでない場合、 TypeError を発生させます。 C変数は、 PyObject * として宣言することもできます。

ustr )[const Py_UNICODE *]

Python Unicodeオブジェクトを、NULで終了するUnicode文字のバッファへのCポインタに変換します。 Py_UNICODE ポインター変数のアドレスを渡す必要があります。このポインター変数には、既存のUnicodeバッファーへのポインターが入力されます。 Py_UNICODE 文字の幅は、コンパイルオプション(16ビットまたは32ビット)によって異なることに注意してください。 Python文字列には、埋め込まれたnullコードポイントを含めることはできません。 含まれている場合、 ValueError 例外が発生します。

バージョン3.5で変更:以前は、Python文字列に埋め込まれたnullコードポイントが検出されたときに TypeError が発生していました。

u#str )[const Py_UNICODE *、intまたはPy_ssize_t]

uのこのバリアントは、2つのC変数に格納します。1つ目はUnicodeデータバッファーへのポインターで、2つ目はその長さです。 このバリアントは、ヌルコードポイントを許可します。

Zstr またはNone)[const Py_UNICODE *]

uと同様ですが、PythonオブジェクトがNoneの場合もあります。その場合、 Py_UNICODE ポインターはNULLに設定されます。

Z#str またはNone)[const Py_UNICODE *、intまたはPy_ssize_t]

u#と同様ですが、PythonオブジェクトがNoneの場合もあります。その場合、 Py_UNICODE ポインターはNULLに設定されます。

Ustr )[PyObject *]

変換を試行せずに、PythonオブジェクトがUnicodeオブジェクトである必要があります。 オブジェクトがUnicodeオブジェクトでない場合、 TypeError を発生させます。 C変数は、 PyObject * として宣言することもできます。

w*(読み取り/書き込みバイトのようなオブジェクト)[Py_buffer]

この形式は、読み取り/書き込みバッファインターフェイスを実装するすべてのオブジェクトを受け入れます。 これは、呼び出し元によって提供された Py_buffer 構造体を埋めます。 バッファにはヌルバイトが埋め込まれている場合があります。 呼び出し元は、バッファーの処理が完了したら、 PyBuffer_Release()を呼び出す必要があります。

esstr )[const char * encoding、char ** buffer]

sのこのバリアントは、Unicodeを文字バッファーにエンコードするために使用されます。 これは、NULバイトが埋め込まれていないエンコードされたデータに対してのみ機能します。

この形式には2つの引数が必要です。 最初のものは入力としてのみ使用され、NULで終了する文字列としてのエンコーディングの名前を指す const char * 、またはNULLである必要があります。この場合、'utf-8'エンコーディングが使用されます。 名前付きエンコーディングがPythonに認識されていない場合、例外が発生します。 2番目の引数は char ** である必要があります。 参照するポインタの値は、引数テキストの内容を含むバッファに設定されます。 テキストは、最初の引数で指定されたエンコーディングでエンコードされます。

PyArg_ParseTuple()は、必要なサイズのバッファーを割り当て、エンコードされたデータをこのバッファーにコピーし、 * buffer を調整して新しく割り当てられたストレージを参照します。 呼び出し元は、 PyMem_Free()を呼び出して、使用後に割り当てられたバッファーを解放する責任があります。

etstrbytes または bytearray )[const char * encoding、char ** buffer]

esと同じですが、バイト文字列オブジェクトが再コーディングせずに渡される点が異なります。 代わりに、実装では、バイト文字列オブジェクトがパラメータとして渡されたエンコーディングを使用することを前提としています。

es#str )[const char * encoding、char ** buffer、intまたはPy_ssize_t * buffer_length]

s#のこのバリアントは、Unicodeを文字バッファーにエンコードするために使用されます。 es形式とは異なり、このバリアントでは、NUL文字を含む入力データを使用できます。

3つの引数が必要です。 最初のものは入力としてのみ使用され、NULで終了する文字列としてのエンコーディングの名前を指す const char * 、またはNULLである必要があります。この場合、'utf-8'エンコーディングが使用されます。 名前付きエンコーディングがPythonに認識されていない場合、例外が発生します。 2番目の引数は char ** である必要があります。 参照するポインタの値は、引数テキストの内容を含むバッファに設定されます。 テキストは、最初の引数で指定されたエンコーディングでエンコードされます。 3番目の引数は整数へのポインタでなければなりません。 参照される整数は、出力バッファのバイト数に設定されます。

操作には2つのモードがあります。

* bufferNULLポインターを指す場合、関数は必要なサイズのバッファーを割り当て、エンコードされたデータをこのバッファーにコピーし、 * buffer を設定して新しく割り当てられたストレージ。 呼び出し元は、 PyMem_Free()を呼び出して、使用後に割り当てられたバッファーを解放する責任があります。

* bufferNULL以外のポインター(既に割り当てられているバッファー)を指している場合、 PyArg_ParseTuple()はこの場所をバッファーとして使用し、の初期値を解釈します。バッファサイズとして * buffer_length 。 次に、エンコードされたデータをバッファにコピーし、NULで終了します。 バッファが十分に大きくない場合、 ValueError が設定されます。

どちらの場合も、 * buffer_length は、末尾のNULバイトを含まないエンコードされたデータの長さに設定されます。

et#strbytes または bytearray )[const char * encoding、char ** buffer、intまたはPy_ssize_t * buffer_length]

es#と同じですが、バイト文字列オブジェクトが再コーディングせずに渡される点が異なります。 代わりに、実装では、バイト文字列オブジェクトがパラメータとして渡されたエンコーディングを使用することを前提としています。


数字

bint )[unsigned char]

非負のPython整数を、C unsigned char に格納されているunsignedtinyintに変換します。

Bint )[unsigned char]

Python整数をオーバーフローチェックなしで小さなintに変換し、C unsigned char に格納します。

hint )[short int]

Python整数をC short int に変換します。

Hint )[unsigned short int]

オーバーフローチェックを行わずに、Python整数をC unsigned short int に変換します。

iint )[int]

Python整数をプレーンC int に変換します。

Iint )[unsigned int]

オーバーフローチェックを行わずに、Python整数をC unsigned int に変換します。

lint )[long int]

Python整数をC long int に変換します。

kint )[unsigned long]

オーバーフローチェックを行わずに、Python整数をC unsigned long に変換します。

Lint )[long long]

Python整数をC long long に変換します。

Kint )[unsigned long long]

オーバーフローチェックを行わずに、Python整数をC unsigned long long に変換します。

nint )[Py_ssize_t]

Python整数をC Py_ssize_tに変換します。

cbytes または bytearray の長さ1)[char]

長さ1の bytes または bytearray オブジェクトとして表されるPythonバイトをC char に変換します。

バージョン3.3で変更: bytearray オブジェクトを許可します。

C(長さ1の str )[int]

長さ1の str オブジェクトとして表されるPython文字をC int に変換します。

ffloat )[float]

Python浮動小数点数をC float に変換します。

dfloat )[double]

Python浮動小数点数をC double に変換します。

Dcomplex )[Py_complex]

Pythonの複素数をC Py_complex 構造に変換します。


その他のオブジェクト

O(オブジェクト)[PyObject *]
Pythonオブジェクト(変換なし)をCオブジェクトポインターに格納します。 したがって、Cプログラムは、渡された実際のオブジェクトを受け取ります。 オブジェクトの参照カウントは増加しません。 保存されているポインタはNULLではありません。
O!(オブジェクト)[ typeobject 、PyObject *]
PythonオブジェクトをCオブジェクトポインタに格納します。 これはOに似ていますが、2つのC引数を取ります。1つ目はPython型オブジェクトのアドレス、2つ目は( PyObject * 型の)C変数のアドレスです。オブジェクトポインタが格納されます。 Pythonオブジェクトに必要なタイプがない場合、 TypeError が発生します。
O&(オブジェクト)[コンバーターすべて]

コンバーター関数を使用してPythonオブジェクトをC変数に変換します。 これには2つの引数があります。1つ目は関数、2つ目は void * に変換された(任意の型の)C変数のアドレスです。 コンバーター関数は次のように呼び出されます。

status = converter(object, address);

ここで、 object は変換されるPythonオブジェクトであり、 address PyArg_Parse * 関数に渡された void * 引数です。 返されるステータスは、変換が成功した場合は1になり、変換が失敗した場合は0になります。 変換が失敗した場合、コンバーター関数は例外を発生させ、アドレスの内容を変更しないままにする必要があります。

コンバーターPy_CLEANUP_SUPPORTEDを返す場合、引数の解析が最終的に失敗すると、2回目の呼び出しが行われる可能性があり、コンバーターは既に割り当てられているメモリを解放する機会が与えられます。 この2番目の呼び出しでは、 object パラメーターはNULLになります。 アドレスは、元の呼び出しと同じ値になります。

バージョン3.1で変更: Py_CLEANUP_SUPPORTEDが追加されました。

pbool )[int]

渡された値が真であるかどうかをテストし(ブール p redicate)、結果を同等のCのtrue / false整数値に変換します。 式がtrueの場合はintを1に設定し、falseの場合は0に設定します。 これは、有効なPython値を受け入れます。 Pythonが値の真理値をテストする方法の詳細については、真理値テストを参照してください。

バージョン3.3の新機能。

(items)タプル)[マッチングアイテム]

オブジェクトは、長さが items のフォーマット単位の数であるPythonシーケンスである必要があります。 C引数は、 items の個々のフォーマット単位に対応している必要があります。 シーケンスのフォーマット単位はネストできます。

「長い」整数(値がプラットフォームのLONG_MAXを超える整数)を渡すことは可能ですが、適切な範囲チェックは行われません。受信フィールドが小さすぎて値を受信できない場合、最上位ビットはサイレントに切り捨てられます(実際、セマンティクスはCのダウンキャストから継承されます—マイレージは異なる場合があります)。

他のいくつかの文字は、フォーマット文字列で意味を持ちます。 これらは、ネストされた括弧内では発生しない場合があります。 彼らです:

|

Python引数リストの残りの引数がオプションであることを示します。 オプションの引数に対応するC変数は、デフォルト値に初期化する必要があります—オプションの引数が指定されていない場合、 PyArg_ParseTuple()は対応するC変数の内容に触れません。

$

PyArg_ParseTupleAndKeywords()のみ:Python引数リストの残りの引数がキーワードのみであることを示します。 現在、すべてのキーワードのみの引数もオプションの引数である必要があるため、フォーマット文字列では常に|$の前に指定する必要があります。

バージョン3.3の新機能。

:

フォーマット単位のリストはここで終わります。 コロンの後の文字列は、エラーメッセージの関数名として使用されます( PyArg_ParseTuple()が発生する例外の「関連付けられた値」)。

;

フォーマット単位のリストはここで終わります。 セミコロンの後の文字列は、デフォルトのエラーメッセージのの代わりにエラーメッセージとして使用されます。 :;は相互に除外します。

呼び出し元に提供されるPythonオブジェクト参照は、借用参照であることに注意してください。 参照カウントをデクリメントしないでください!

これらの関数に渡される追加の引数は、タイプがフォーマット文字列によって決定される変数のアドレスである必要があります。 これらは、入力タプルからの値を格納するために使用されます。 上記のフォーマット単位のリストで説明されているように、これらのパラメーターが入力値として使用される場合がいくつかあります。 その場合、対応するフォーマット単位に指定されているものと一致する必要があります。

変換を成功させるには、 arg オブジェクトがフォーマットと一致し、フォーマットが使い果たされている必要があります。 成功すると、 PyArg_Parse * 関数はtrueを返します。それ以外の場合は、falseを返し、適切な例外を発生させます。 いずれかのフォーマット単位での変換失敗により PyArg_Parse * 関数が失敗した場合、それに対応するアドレス以降のフォーマット単位の変数は変更されません。


API関数

int PyArg_ParseTuple(PyObject *args, const char *format, ...)
位置パラメーターのみをローカル変数に取り込む関数のパラメーターを解析します。 成功するとtrueを返します。 失敗すると、falseを返し、適切な例外を発生させます。
int PyArg_VaParse(PyObject *args, const char *format, va_list vargs)
PyArg_ParseTuple()と同じですが、可変数の引数ではなくva_listを受け入れる点が異なります。
int PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *keywords[], ...)

位置パラメーターとキーワードパラメーターの両方をローカル変数に取り込む関数のパラメーターを解析します。 keywords 引数は、NULLで終了するキーワードパラメーター名の配列です。 空の名前は、位置のみのパラメーターを示します。 成功するとtrueを返します。 失敗すると、falseを返し、適切な例外を発生させます。

バージョン3.6で変更: 位置のみのパラメーターのサポートが追加されました。

int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *keywords[], va_list vargs)
PyArg_ParseTupleAndKeywords()と同じですが、可変数の引数ではなくva_listを受け入れる点が異なります。
int PyArg_ValidateKeywordArguments(PyObject*)

キーワード引数辞書のキーが文字列であることを確認してください。 これは、 PyArg_ParseTupleAndKeywords()が使用されていない場合にのみ必要です。後者は、すでにこのチェックを行っているためです。

バージョン3.2の新機能。

int PyArg_Parse(PyObject *args, const char *format, ...)
「古いスタイル」の関数の引数リストを分解するために使用される関数—これらはPython3で削除されたMETH_OLDARGSパラメーター解析メソッドを使用する関数です。 これは、新しいコードでのパラメーター解析での使用は推奨されていません。また、標準インタープリターのほとんどのコードは、その目的でこれを使用しないように変更されています。 ただし、他のタプルを分解するための便利な方法であり続け、その目的で引き続き使用される可能性があります。
int PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...)

引数のタイプを指定するためにフォーマット文字列を使用しない、より単純な形式のパラメーター検索。 このメソッドを使用してパラメーターを取得する関数は、関数テーブルまたはメソッドテーブルで METH_VARARGS として宣言する必要があります。 実際のパラメーターを含むタプルは、 args として渡す必要があります。 実際にはタプルである必要があります。 タプルの長さは、 min 以上、 max 以下である必要があります。 minmax は同じである可能性があります。 追加の引数を関数に渡す必要があります。各引数は、 PyObject * 変数へのポインターである必要があります。 これらには、 args の値が入力されます。 借用した参照が含まれます。 args で指定されていないオプションのパラメーターに対応する変数は入力されません。 これらは、呼び出し元が初期化する必要があります。 この関数は、成功した場合はtrueを返し、 args がタプルでない場合、または要素の数が間違っている場合はfalseを返します。 障害が発生した場合は例外が設定されます。

これは、弱参照用の_weakrefヘルパーモジュールのソースから取得したこの関数の使用例です。

static PyObject *
weakref_ref(PyObject *self, PyObject *args)
{
    PyObject *object;
    PyObject *callback = NULL;
    PyObject *result = NULL;

    if (PyArg_UnpackTuple(args, "ref", 1, 2, &object, &callback)) {
        result = PyWeakref_NewRef(object, callback);
    }
    return result;
}

この例での PyArg_UnpackTuple()の呼び出しは、 PyArg_ParseTuple()のこの呼び出しと完全に同等です。

PyArg_ParseTuple(args, "O|O:ref", &object, &callback)


価値観の構築

PyObject *Py_BuildValue(const char *format, ...)

PyArg_Parse * ファミリーの関数と一連の値で受け入れられるものと同様のフォーマット文字列に基づいて、新しい値を作成します。 エラーの場合は値またはNULLを返します。 NULLが返されると、例外が発生します。

Py_BuildValue()は、常にタプルを作成するとは限りません。 フォーマット文字列に2つ以上のフォーマット単位が含まれている場合にのみ、タプルを作成します。 フォーマット文字列が空の場合、Noneを返します。 フォーマットユニットが1つだけ含まれている場合は、そのフォーマットユニットによって記述されているオブジェクトを返します。 サイズ0または1のタプルを強制的に返すには、フォーマット文字列を括弧で囲みます。

sおよびs#形式の場合と同様に、メモリバッファがパラメータとして渡され、ビルドオブジェクトにデータが提供されると、必要なデータがコピーされます。 呼び出し元によって提供されたバッファーは、 Py_BuildValue()によって作成されたオブジェクトによって参照されることはありません。 つまり、コードがmalloc()を呼び出し、割り当てられたメモリを Py_BuildValue()に渡す場合、コードは Py_BuildValueでそのメモリのfree()を呼び出す必要があります。 ()が戻ります。

以下の説明では、引用符で囲まれた形式がフォーマット単位です。 (丸)括弧内のエントリは、フォーマットユニットが返すPythonオブジェクトタイプです。 [角かっこ]内のエントリは、渡されるC値のタイプです。

スペース、タブ、コロン、およびコンマの文字は、フォーマット文字列では無視されます(ただし、s#などのフォーマット単位内では無視されます)。 これを使用して、長い形式の文字列を少し読みやすくすることができます。

sstr またはNone)[const char *]

'utf-8'エンコーディングを使用して、nullで終了するC文字列をPython str オブジェクトに変換します。 C文字列ポインタがNULLの場合、Noneが使用されます。

s#str またはNone)[const char *、intまたはPy_ssize_t]

'utf-8'エンコーディングを使用して、C文字列とその長さをPython str オブジェクトに変換します。 C文字列ポインタがNULLの場合、長さは無視され、Noneが返されます。

ybytes )[const char *]

これにより、C文字列がPython bytes オブジェクトに変換されます。 C文字列ポインタがNULLの場合、Noneが返されます。

y#bytes )[const char *、intまたはPy_ssize_t]

これにより、C文字列とその長さがPythonオブジェクトに変換されます。 C文字列ポインタがNULLの場合、Noneが返されます。

zstr またはNone)[const char *]

sと同じです。

z#str またはNone)[const char *、intまたはPy_ssize_t]

s#と同じです。

ustr )[const wchar_t *]

Unicode(UTF-16またはUCS-4)データのnullで終了するwchar_tバッファーをPythonUnicodeオブジェクトに変換します。 UnicodeバッファポインタがNULLの場合、Noneが返されます。

u#str )[const wchar_t *、intまたはPy_ssize_t]

Unicode(UTF-16またはUCS-4)データバッファーとその長さをPythonUnicodeオブジェクトに変換します。 UnicodeバッファポインタがNULLの場合、長さは無視され、Noneが返されます。

Ustr またはNone)[const char *]

sと同じです。

U#str またはNone)[const char *、intまたはPy_ssize_t]

s#と同じです。

iint )[int]

プレーンC int をPython整数オブジェクトに変換します。

bint )[char]

プレーンC char をPython整数オブジェクトに変換します。

hint )[short int]

プレーンC short int をPython整数オブジェクトに変換します。

lint )[long int]

C long int をPython整数オブジェクトに変換します。

Bint )[unsigned char]

C unsigned char をPython整数オブジェクトに変換します。

Hint )[unsigned short int]

C unsigned short int をPython整数オブジェクトに変換します。

Iint )[unsigned int]

C unsigned int をPython整数オブジェクトに変換します。

kint )[unsigned long]

C unsigned long をPython整数オブジェクトに変換します。

Lint )[long long]

C long long をPython整数オブジェクトに変換します。

Kint )[unsigned long long]

C unsigned long long をPython整数オブジェクトに変換します。

nint )[Py_ssize_t]

C Py_ssize_tをPython整数に変換します。

cバイトの長さ1)[char]

バイトを表すC int を長さ1のPython bytes オブジェクトに変換します。

C(長さ1の str )[int]

文字を表すC int を長さ1のPython str オブジェクトに変換します。

dfloat )[double]

C double をPython浮動小数点数に変換します。

ffloat )[float]

C float をPython浮動小数点数に変換します。

Dcomplex )[Py_complex *]

C Py_complex 構造体をPythonの複素数に変換します。

O(オブジェクト)[PyObject *]

Pythonオブジェクトをそのまま渡します(参照カウントが1つ増えることを除いて)。 渡されたオブジェクトがNULLポインターの場合、引数を生成する呼び出しでエラーが検出され、例外が設定されたことが原因であると考えられます。 したがって、 Py_BuildValue()NULLを返しますが、例外は発生しません。 まだ例外が発生していない場合は、 SystemError が設定されます。

S(オブジェクト)[PyObject *]

Oと同じです。

N(オブジェクト)[PyObject *]

Oと同じですが、オブジェクトの参照カウントがインクリメントされない点が異なります。 引数リスト内のオブジェクトコンストラクターの呼び出しによってオブジェクトが作成される場合に役立ちます。

O&(オブジェクト)[コンバーターすべて]

コンバーター関数を使用して、すべてをPythonオブジェクトに変換します。 この関数は、 anything void * と互換性があるはずです)を引数として呼び出され、「新しい」Pythonオブジェクトを返すか、エラーの場合はNULLを返す必要があります。発生した。

(items)タプル)[マッチングアイテム]

C値のシーケンスを同じ数のアイテムを持つPythonタプルに変換します。

[items]リスト)[マッチングアイテム]

C値のシーケンスを同じ数のアイテムを持つPythonリストに変換します。

{items}dict )[マッチングアイテム]

C値のシーケンスをPython辞書に変換します。 連続するC値の各ペアは、それぞれキーと値として機能する1つの項目をディクショナリに追加します。

フォーマット文字列にエラーがある場合、 SystemError 例外が設定され、NULLが返されます。

PyObject *Py_VaBuildValue(const char *format, va_list vargs)
Py_BuildValue()と同じですが、可変数の引数ではなくva_listを受け入れる点が異なります。