引数の解釈と値の構築¶
これらの関数は、独自の拡張関数やメソッドを作成するときに便利です。 追加の情報や例は Python インタプリタの拡張と埋め込み を参照してください。
最初に説明する 3 つの関数、 PyArg_ParseTuple(), PyArg_ParseTupleAndKeywords(),および PyArg_Parse() はいずれも 書式文字列 (format string) を使います。書式文字列は、関数が受け取るはずの引数に関する情報を伝えるのに用いられます。いずれの関数における書式文字列も、同じ書式を使っています。
引数を解析する¶
書式文字列は、0 個以上の「書式単位 (format unit)」からなります。 書式単位は一つの Python オブジェクトを記述し、通常は単一の文字か、複数の書式単位を丸括弧で囲んだものです。 丸括弧で囲まれた並びでない書式単位は、一部の例外を除き、これらの関数に渡す一つのアドレス引数に対応します。 以下の説明では、引用符で囲んだものが書式単位、丸括弧内が対応する Python オブジェクトの型、角括弧内がアドレスを渡す C 変数の型です。
文字列とバッファ¶
注釈
Python 3.12 以前では、以下で説明された全ての # の種類 (s#, y# など) を使用するために PY_SSIZE_T_CLEAN マクロを Python.h のインクルードの前に定義しなければなりません。これは Python 3.13 以降では不要です。
以下のフォーマットはオブジェクトに連続したメモリチャンクとしてアクセスするためのものです。返される unicode や bytes のために生のストレージを用意する必要はありません。
特に言及されていない場合、バッファーは NUL 終端されていません。
文字列とバッファをCに変換する方法は3つあります:
y*やs*などの形式はPy_buffer構造体に情報を設定します。 これによって内部バッファがロックされるので、呼び出し側はPy_BEGIN_ALLOW_THREADSブロック内でも、可変データのサイズ変更や破棄の危険なしにバッファを使えます。 そのため、データの処理が完了したときや途中で中止したときは、PyBuffer_Release()を 必ず呼び出す必要があります。es、es#、et、et#形式は、結果を格納するバッファを割り当てます。 データの処理が完了したときや途中で中止したときは、PyMem_Free()を 必ず呼び出す必要があります。ほかの形式は
strまたはbytesなどの読み取り専用の bytes-like オブジェクト を受け取り、そのバッファへのconst char *ポインタを提供します。 この場合、バッファは「借用」されます。 対応する Python オブジェクトが管理し、そのオブジェクトと寿命を共有します。 メモリを自分で解放する必要はありません。内部バッファを安全に借用できるように、オブジェクトの
PyBufferProcs.bf_releasebufferフィールドはNULLでなければなりません。 この条件により、bytearrayのような一般的な可変オブジェクトだけでなく、bytesのmemoryviewのような一部の読み取り専用オブジェクトも受け付けません。この
bf_releasebufferの要件以外に、入力オブジェクトが不変かどうかを確認するチェックはありません。 例えば、書き込み可能なバッファの要求に応じるかどうかや、別のスレッドがデータを変更できるかどうかは確認しません。
s(str) [const char *]Unicode オブジェクトを、キャラクタ文字列を指す C のポインタに変換します。キャラクタ型ポインタ変数のアドレスを渡すと、すでに存在している文字列へのポインタをその変数に記録します。C 文字列は NUL で終端されています。Python の文字列型は、 null コードポイントが途中に埋め込まれていてはなりません; もし埋め込まれていれば
ValueError例外を送出します。Unicode オブジェクトは'utf-8'を使って C 文字列に変換されます。変換に失敗するとUnicodeErrorを送出します。注釈
このフォーマットは bytes-like objects をサポートしません。 ファイルシステムパスを受け取って C 言語の文字列に変換したい場合は、
O&フォーマットを、 converter にPyUnicode_FSConverter()を指定して利用すると良いです。バージョン 3.5 で変更: 以前は Python 文字列に null コードポイントが埋め込まれていたときに
TypeErrorを送出していました。s*(strまたは bytes-like object) [Py_buffer]このフォーマットは Unicode オブジェクトと bytes-like object を受け付けて、呼び出し元から渡された
Py_buffer構造体に値を格納します。 結果の C 文字列は NUL バイトを含むかもしれません。 Unicode オブジェクトは'utf-8'エンコーディングで C 文字列に変換されます。s#(str, 読み取り専用の bytes-like object) [const char *,Py_ssize_t]s*と同様ですが、借用バッファ を提供します。 結果は二つの C 変数に格納され、一つ目は C 文字列へのポインタ、二つ目はその長さです。 文字列にはヌルバイトが埋め込まれていても構いません。 Unicode オブジェクトは'utf-8'エンコーディングで C 文字列に変換されます。z(strまたはNone) [const char *]Like
s, but the Python object may also beNone, in which case the C pointer is set toNULL.z*(str, bytes-like object またはNone) [Py_buffer]Like
s*, but the Python object may also beNone, in which case thebufmember of thePy_bufferstructure is set toNULL.z#(str, 読み出し専用の bytes-like object またはNone) [const char *,Py_ssize_t]Like
s#, but the Python object may also beNone, in which case the C pointer is set toNULL.y(読み出し専用の bytes-like object) [const char *]bytes-like オブジェクトを、借用した 文字列への C ポインタに変換します。 Unicode オブジェクトは受け付けません。 バイトバッファにはヌルバイトを埋め込めません。 含まれている場合は
ValueError例外を送出します。バージョン 3.5 で変更: 以前は bytes バッファにヌルバイトが埋め込まれていたときに
TypeErrorを送出していました。y*(bytes-like object) [Py_buffer]s*の変形で、 Unicode オブジェクトを受け付けず、 bytes-like object のみを受け付けます。 バイナリデータを受け付ける目的には、このフォーマットを使うことを推奨します。y#(読み出し専用の bytes-like object) [const char *,Py_ssize_t]s#の変形で、 Unicode オブジェクトを受け付けず、bytes-like object だけを受け付けます。S(bytes) [PyBytesObject *]Pythonオブジェクトとして、
bytesオブジェクトを要求し、いかなる変換も行いません。オブジェクトが bytes オブジェクトでなければ、TypeErrorを送出します。C 変数は PyObject* と宣言しても構いません。Y(bytearray) [PyByteArrayObject *]Python オブジェクトとして
bytearrayオブジェクトを要求し、いかなる変換もおこないません。 もしオブジェクトがbytearrayでなければ、TypeErrorを送出します。C 変数は PyObject* として宣言しても構いません。U(str) [PyObject *]Python オブジェクトとして Unicode オブジェクトを要求し、いかなる変換も行いません。オブジェクトが Unicode オブジェクトではない場合、
TypeErrorが送出されます。C変数は PyObject* として宣言しても構いません。w*(読み書き可能な bytes-like object) [Py_buffer]This format accepts any object which implements the read-write buffer interface. It fills a
Py_bufferstructure provided by the caller. The buffer may contain embedded null bytes. The caller has to callPyBuffer_Release()when it is done with the buffer.es(str) [const char *encoding, char **buffer]これは
sの変化形で、Unicodeをキャラクタ型バッファにエンコードするために用いられます。NULバイトが埋め込まれていないデータでのみ動作します。この書式には二つの引数が必要です。一つ目は入力にのみ用いられ、 NUL で終端されたエンコード名文字列を指す const char* 型または、
'utf-8'が使われることを表すNULLでなければなりません。指定したエンコード名を Python が理解できない場合には例外を送出します。第二の引数は char** でなければなりません; この引数が参照しているポインタの値は、引数に指定したテキストの内容が入ったバッファへのポインタになります。テキストは最初の引数に指定したエンコード方式でエンコードされます。PyArg_ParseTuple()を使うと、必要なサイズのバッファを確保し、そのバッファにエンコード後のデータをコピーして、 *buffer がこの新たに確保された記憶領域を指すように変更します。呼び出し側には、確保されたバッファを使い終わった後にPyMem_Free()で解放する責任があります。et(str,bytesまたはbytearray) [const char *encoding, char **buffer]esと同じです。ただし、バイト文字列オブジェクトをエンコードし直さずに渡します。その代わり、実装ではバイト文字列オブジェクトがパラメタに渡したエンコードを使っているものと仮定します。es#(str) [const char *encoding, char **buffer,Py_ssize_t*buffer_length]s#の変種で、Unicode を文字バッファにエンコードするために使います。es形式と異なり、NUL 文字を含む入力データを受け付けます。この書式には三つの引数が必要です。一つ目は入力にのみ用いられ、 NUL で終端されたエンコード名文字列を指す const char* 型か
NULLでなければなりません。NULLの場合には'utf-8'を使います。指定したエンコード名を Python が理解できない場合には例外を送出します。第二の引数は char** でなければなりません; この引数が参照しているポインタの値は、引数に指定したテキストの内容が入ったバッファへのポインタになります。テキストは最初の引数に指定したエンコード方式でエンコードされます。第三の引数は整数へのポインタでなければなりません; ポインタが参照している整数の値は出力バッファ内のバイト数にセットされます。この書式の処理には二つのモードがあります:
*buffer が
NULLポインタを指している場合、関数は必要なサイズのバッファを確保し、そのバッファにエンコード後のデータをコピーして、 *buffer がこの新たに確保された記憶領域を指すように変更します。呼び出し側には、確保されたバッファを使い終わった後にPyMem_Free()で解放する責任があります。*buffer が非
NULLのポインタ (すでにメモリ確保済みのバッファ) を指している場合、PyArg_ParseTuple()はこのメモリ位置をバッファとして用い、 *buffer_length の初期値をバッファサイズとして用います。 PyArg_ParseTuple は次にエンコード済みのデータをバッファにコピーして、NUL で終端します。バッファの大きさが足りなければValueErrorがセットされます。どちらの場合も、 *buffer_length は終端の NUL バイトを含まないエンコード済みデータの長さにセットされます。
et#(str,bytesまたはbytearray) [const char *encoding, char **buffer,Py_ssize_t*buffer_length]es#と同じです。ただし、バイト文字列オブジェクトをエンコードし直さずに渡します。その代わり、実装ではバイト文字列オブジェクトがパラメタに渡したエンコードを使っているものと仮定します。
バージョン 3.12 で変更: 従来の Py_UNICODE* 表現を使っていたため、u、u#、Z、Z# を削除しました。
数¶
これらの形式は、Python の数値や単一の文字を C の数値として表すためのものです。
int、float、complex を必要とする形式では、対応する特殊メソッド __index__()、__float__()、__complex__() で Python オブジェクトを必要な型に変換することもできます。
For signed integer formats, OverflowError is raised if the value
is out of range for the C type.
For unsigned integer formats, no range checking is done --- the
most significant bits are silently truncated when the receiving field is too
small to receive the value.
b(int) [unsigned char]負でない Python 整数を小さい符号なし整数に変換し、C の unsigned char に格納します。
B(int) [unsigned char]Convert a Python integer to a tiny integer without overflow checking, stored in a C unsigned char.
h(int) [short int]Python の整数を、 C の short int 型に変換します。
H(int) [unsigned short int]Python の整数を、オーバフローチェックを行わずに、 C の unsigned short int 型に変換します。
i(int) [int]Python の整数を、 C の int 型に変換します。
I(int) [unsigned int]Python の整数を、オーバフローチェックを行わずに、 C の unsigned int 型に変換します。
l(int) [long int]Python の整数を、 C の long int 型に変換します。
k(int) [unsigned long]Python の整数を、オーバフローチェックを行わずに、 C の unsigned long 型に変換します。
L(int) [long long]Python の整数を、 C の long long 型に変換します。
K(int) [unsigned long long]PythonのintをC unsigned long long へオーバーフローの確認をせず変換する
n(int) [Py_ssize_t]Python の整数をCの
Py_ssize_t型に変換します。c(長さ 1 の、bytesまたはbytearray) [char]長さ 1 の
bytesまたはbytearrayオブジェクトとして表現されている Python バイトを C の char 型に変換します。バージョン 3.3 で変更:
bytearrayを受け付けるようになりました。C(長さ 1 のstr) [int]長さ 1 の
strオブジェクトとして表現されている Python キャラクタを C の int 型に変換します。f(float) [float]Python の浮動小数点数を C の float に変換します。
d(float) [double]Python の浮動小数点数を C の double に変換します。
D(complex) [Py_complex]Python の複素数型を、 C の
Py_complex構造体に変換します。
その他のオブジェクト¶
O(object) [PyObject *]Python オブジェクトを変換せずに C オブジェクトのポインタに格納します。これにより、C プログラムは渡されたオブジェクトそのものを受け取ります。オブジェクトへの新しい 強参照 は作成されません(つまり、参照カウントは増加しません)。格納されるポインタは
NULLではありません。O!(object) [typeobject, PyObject *]Python オブジェクトを C の Python オブジェクト型ポインタに保存します。
Oに似ていますが、二つの C の引数をとります: 一つ目の引数は Python の型オブジェクトへのアドレスで、二つ目の引数はオブジェクトへのポインタが保存されている (PyObject* の) C の変数へのアドレスです。Python オブジェクトが指定した型ではない場合、TypeErrorを送出します。
O&(オブジェクト) [converter, address]Python オブジェクトを converter 関数を介して C の変数に変換します。二つの引数をとります: 一つ目は関数で、二つ目は (任意の型の) C 変数へのアドレスを void* 型に変換したものです。 converter は以下のようにして呼び出されます:
status = converter(object, address);
ここで object は変換対象の Python オブジェクトで、 address は
PyArg_Parse*に渡した void* 型の引数です。戻り値 status は変換に成功した際に1,失敗した場合には0になります。変換に失敗した場合、 converter 関数は address の内容を変更せずに例外を送出しなくてはなりません。converterがPy_CLEANUP_SUPPORTEDを返した場合、後で引数の解析に失敗すると、すでに割り当てたメモリを解放できるように再び呼び出されることがあります。 この 2 回目の呼び出しでは、object引数はNULL、addressは最初の呼び出しと同じ値になります。変換関数の例:
PyUnicode_FSConverter()とPyUnicode_FSDecoder()。バージョン 3.1 で変更:
Py_CLEANUP_SUPPORTEDを追加しました。p(bool) [int]真偽値が求められる箇所 (a boolean predicate) に渡された値を判定し、その結果を等価な C の true/false 整数値に変換します。 もし式が真なら int には
1が、偽なら0が設定されます。この関数は任意の有効なPython値を受け付けます。 Pythonが値の真偽をどのように判定するかを知りたければ、 Truth Value Testing を参照してください。Added in version 3.3.
(items)(tuple) [matching-items]The object must be a Python sequence whose length is the number of format units in items. The C arguments must correspond to the individual format units in items. Format units for sequences may be nested.
その他、書式文字列において意味を持つ文字がいくつかあります。それらの文字は括弧による入れ子内には使えません。以下に文字を示します:
|Indicates that the remaining arguments in the Python argument list are optional. The C variables corresponding to optional arguments should be initialized to their default value --- when an optional argument is not specified,
PyArg_ParseTuple()does not touch the contents of the corresponding C variable(s). For example, the format string"OO|OO"corresponds to the Python signaturef(a, b, c=None, d=None).$PyArg_ParseTupleAndKeywords()only: Indicates that the remaining arguments in the Python argument list are keyword-only. They are optional if|was specified before$, and required otherwise.|cannot be specified after$. For example, the format string"O|O$O"corresponds to the Python signaturef(a, b=None, *, c=None), and the format string"OO$OO"corresponds tof(a, b, *, c, d).Added in version 3.3.
:この文字があると、書式単位の記述はそこで終わります; コロン以降の文字列は、エラーメッセージにおける関数名 (
PyArg_ParseTuple()が送出する例外の "付属値 (associated value)") として使われます。;この文字があると、書式単位の記述はそこで終わります; セミコロン以降の文字列は、デフォルトエラーメッセージを 置き換える エラーメッセージとして使われます。
:と;は相互に排他の文字です。
注意:呼び出し元に渡されるPythonオブジェクトの参照はすべて*借用*された参照です。これらを解放しないでください(つまり、参照カウントを減らさないでください)!
以下の関数に渡す補助引数 (additional argument) は、書式文字列から決定される型へのアドレスでなければなりません; 補助引数に指定したアドレスは、タプルから入力された値を保存するために使います。上の書式単位のリストで説明したように、補助引数を入力値として使う場合がいくつかあります; その場合、対応する書式単位の指定する形式に従うようにしなければなりません。
変換を正しく行うためには、 arg オブジェクトは書式文字に一致しなければならず、かつ書式文字列内の書式単位に全て値が入るようにしなければなりません。成功すると、 PyArg_Parse* 関数は真を返します。それ以外の場合には偽を返し、適切な例外を送出します。書式単位のどれかの変換失敗により PyArg_Parse* が失敗した場合、失敗した書式単位に対応するアドレスとそれ以降のアドレスの内容は変更されません。
API 関数¶
-
int PyArg_ParseTuple(PyObject *args, const char *format, ...)¶
- 次に属します: Stable ABI.
位置引数のみを引数にとる関数のパラメタを解釈して、ローカルな変数に変換します。成功すると真を返します;失敗すると偽を返し、適切な例外を送出します。
-
int PyArg_VaParse(PyObject *args, const char *format, va_list vargs)¶
- 次に属します: Stable ABI.
PyArg_ParseTuple()と同じですが、可変長の引数ではなく va_list を引数にとります。
-
int PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *const *keywords, ...)¶
- 次に属します: Stable ABI.
位置引数とキーワード引数を受け取る関数の引数を解析し、ローカル変数に格納します。
keywords引数は、ヌル終端の ASCII または UTF-8 エンコード C 文字列で指定された仮引数名の配列で、NULLで終端する必要があります。 空の名前は 位置専用仮引数 を表します。 成功した場合は真を返し、失敗した場合は適切な例外を送出して偽を返します。注釈
keywords引数の宣言は、C では char *const*、C++ では const char *const* です。PY_CXX_CONSTマクロで変更できます。バージョン 3.6 で変更: 位置専用引数 を追加した。
バージョン 3.13 で変更:
keywords引数の型は char** ではなく、C では char *const*、C++ では const char *const* になりました。 非 ASCII のキーワード仮引数名をサポートするようになりました。
-
int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *const *keywords, va_list vargs)¶
- 次に属します: Stable ABI.
PyArg_ParseTupleAndKeywords()と同じですが、可変長の引数ではなく va_list を引数にとります。
-
int PyArg_ValidateKeywordArguments(PyObject*)¶
- 次に属します: Stable ABI.
キーワード引数を格納した辞書のキーが文字列であることを確認します。この関数は
PyArg_ParseTupleAndKeywords()を使用しないときにのみ必要で、その理由は後者の関数は同様のチェックを実施するためです。Added in version 3.2.
-
int PyArg_Parse(PyObject *args, const char *format, ...)¶
- 次に属します: Stable ABI.
一つの位置引数を受け取る関数の引数を解析し、ローカル変数に格納します。 成功した場合は真を返し、失敗した場合は適切な例外を送出して偽を返します。
以下はプログラム例です:
// METH_O 呼び出し規約を使う関数 static PyObject* my_function(PyObject *module, PyObject *arg) { int value; if (!PyArg_Parse(arg, "i:my_function", &value)) { return NULL; } // ... value を使う ... }
-
int PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...)¶
- 次に属します: Stable ABI.
引数の型を指定する書式文字列を使わない、より単純な引数の取得方法です。 この方法で引数を取得する関数は、関数テーブルやメソッドテーブルで
METH_VARARGSとして宣言してください。 引数を含むタプルをargsとして渡します。 これは必ずタプルでなければなりません。 タプルの長さはmin以上max以下で、minとmaxは等しくても構いません。 追加の引数は、それぞれ PyObject* 変数へのポインタとして渡す必要があります。 これらの変数にはargsからの値が 借用参照 として格納されます。 省略可能な引数がargsにない場合、対応する変数は変更されないので、呼び出し側で初期化しておいてください。 成功した場合は真を返します。argsがタプルでないか、要素数が正しくない場合は、例外を設定して偽を返します。弱参照用の補助モジュール
_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)
-
PY_CXX_CONST¶
PyArg_ParseTupleAndKeywords()とPyArg_VaParseTupleAndKeywords()のkeywords引数の宣言で、char *const* の前に挿入する値を指定します。 デフォルトは C では空、C++ ではconstです (const char *const*)。 変更するにはPython.hをインクルードする前に、必要な値を定義してください。Added in version 3.13.
値の構築¶
-
PyObject *Py_BuildValue(const char *format, ...)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
PyArg_Parse*ファミリの関数が受け取るのと似た形式の書式文字列および値列に基づいて、新たな値を生成します。生成した値を返します。エラーの場合にはNULLを返します;NULLを返す場合、例外を送出するでしょう。Py_BuildValue()は常にタプルを生成するとは限りません。この関数がタプルを生成するのは、書式文字列に二つ以上の書式単位が入っているときだけです。書式文字列が空の場合Noneを返します; 書式単位が厳密に一つだけ入っている場合、書式単位で指定されている何らかのオブジェクト単体を返します。サイズがゼロや 1 のタプルを返すように強制するには、丸括弧で囲われた書式文字列を使います。書式単位
sやs#の場合のように、オブジェクトを構築する際にデータを供給するためにメモリバッファをパラメタとして渡す場合には、指定したデータはコピーされます。Py_BuildValue()が生成したオブジェクトは、呼び出し側が提供したバッファを決して参照しません。別の言い方をすれば、malloc()を呼び出してメモリを確保し、それをPy_BuildValue()に渡した場合、コード内でPy_BuildValue()が返った後でfree()を呼び出す責任があるということです。以下の説明では、引用符のついた形式は書式単位です; (丸)括弧で囲った部分は書式単位が返す Python のオブジェクト型です; [角] 括弧は関数に渡す値の C 変数型です。
書式文字列内では、(
s#のような書式単位を除いて) スペース、タブ、コロンおよびコンマは無視されます。これらの文字を使うと、長い書式文字列をちょっとだけ読みやすくできます。s(strまたはNone) [const char *]null終端された C 文字列を、
'utf-8'エンコーディングを用いて、 Pythonstrオブジェクトに変換します。もし C 文字列ポインタがNULLの場合、Noneになります。s#(strorNone) [const char *,Py_ssize_t]C 文字列とその長さを
'utf-8'エンコーディングを使って Pythonstrオブジェクトに変換します。C 文字列ポインタがNULLの場合、長さは無視され、Noneになります。y(bytes) [const char *]C 文字列をPython
bytesオブジェクトに変換します。もしC 文字列ポインタがNULLだった場合、Noneを返します。y#(bytes) [const char *,Py_ssize_t]これは C 文字列とその長さから Python オブジェクトに変換します。C 文字列ポインタが
NULLの場合、長さは無視されNoneになります。z(strまたはNone) [const char *]sと同じです。z#(strまたはNone) [const char *,Py_ssize_t]s#と同じです。u(str) [const wchar_t *]null 終端された Unicode (UTF-16 または UCS-4) データの
wchar_tバッファから Python Unicode オブジェクトに変換します。 Unicode バッファポインタがNULLの場合、Noneになります。u#(str) [const wchar_t *,Py_ssize_t]Unicode (UTF-16 または UCS-4) データのバッファとその長さから Python Unicode オブジェクトに変換します。 Unicode バッファポインタが
NULLの場合、長さは無視されNoneになります。U(strまたはNone) [const char *]sと同じです。U#(strまたはNone) [const char *,Py_ssize_t]s#と同じです。i(int) [int]通常の C の int を Python の整数オブジェクトに変換します。
b(int) [char]通常のC の char を Python の整数オブジェクトに変換します。
h(int) [short int]通常のC の short int を Python の整数オブジェクトに変換します。
l(int) [long int]C の long int を Python の整数オブジェクトに変換します。
B(int) [unsigned char]C の unsigned char を Python の整数オブジェクトに変換します。
H(int) [unsigned short int]C の unsigned short int を Python の整数オブジェクトに変換します。
I(int) [unsigned int]C の unsigned int を Python の整数オブジェクトに変換します。
k(int) [unsigned long]C の unsigned long を Python の整数オブジェクトに変換します。
L(int) [long long]C の long long を Python の整数オブジェクトに変換します。
K(int) [unsigned long long]C unsigned long long をPythonのintオブジェクトへ変換する。
n(int) [Py_ssize_t]C の
Py_ssize_tを Python の整数オブジェクトに変換します。c(長さが 1 のbytes) [char]バイトを表す通常の C の int を、長さ 1 の Python の
bytesオブジェクトに変換します。C(長さ 1 のstr) [int]文字を表す通常の C の int を、長さ 1 の Python の
strオブジェクトに変換します。d(float) [double]C の double を Python の浮動小数点数に変換します。
f(float) [float]C の float を Python の浮動小数点数に変換します。
D(complex) [Py_complex *]C の
Py_complex構造体を Python の複素数型に変換します。O(object) [PyObject *]Python オブジェクトをそのまま渡し、そのオブジェクトへの新しい 強参照 を作成します (つまり参照カウントを 1 増やします)。 渡されたオブジェクトが
NULLポインタなら、引数を生成した呼び出しがエラーを検出して例外を設定したものとみなします。 この場合、Py_BuildValue()はNULLを返しますが、新しい例外は送出しません。 まだ例外が設定されていなければSystemErrorを設定します。S(object) [PyObject *]Oと同じです。N(object) [PyObject *]同じです
O, ただし、新しい 強参照 を作成しません。オブジェクトが引数リスト内のオブジェクトコンストラクターの呼び出しによって作成される場合に便利です。O&(object) [converter, anything]anything を converter 関数を介して Python オブジェクトに変換します。この関数は anything (void* と互換の型でなければなりません) を引数にして呼び出され、"新たな" オブジェクトを返すか、失敗した場合には
NULLを返すようにしなければなりません。(items)(tuple) [matching-items]C の値の並びを、同じ要素数の Python のタプルに変換します。
[items](list) [matching-items]C の値の並びを、同じ要素数の Python のリストに変換します。
{items}(dict) [matching-items]C の値の並びを Python の辞書に変換します。 連続する二つの C の値をそれぞれキーと値として、辞書に一つの要素を追加します。
書式文字列に関するエラーが生じると、
SystemError例外をセットしてNULLを返します。
-
PyObject *Py_VaBuildValue(const char *format, va_list vargs)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
Py_BuildValue()と同じですが、可変長引数の代わりに va_list を受け取ります。