Py_BuildValue()

 

この関数は、はPyArg_ParseTuple(に対応するもので 、以下のようにそれが宣言され:.)
この関数は、関数はPyArg_ParseTuple()のペアです。関数の宣言は次の通り:

 

PyObject * Py_BuildValue(CHAR *フォーマット、...); 

これは、同様の形式のユニットのセットを認識するはPyArg_ParseTuple()によって認識されるものには、ではなく、関数に入力された引数(
入力よりも、それは機能部識別はPyArg_ParseTuple()と同じ形式が、パラメータを設定することができる(むしろ出力機能)

出力)ポインタだけであってはならない値。これは、Pythonから呼び出されたC関数から復帰するのに適した新しいPythonオブジェクトを返す。
値だけ、ポインタすることができません。これは、Cの関数を呼び出すのPythonからの復帰に適した新しいPythonオブジェクトを返します。

PyArg_ParseTuple()との一つの違い:ながら、後者は、その最初の引数を必要とするPythonの引数リストは常にあるので(タプルすべき
ことを除いとはPyArg_ParseTuple()のうち、最初のパラメータを必要とするのPythonのパラメータので、タプル(内部的には常にタプルとして表現リスト)、
内部タプルとして表される)、Py_BuildValue()は常にタプルを構築していません。それだけで、その2つまたは複数が含まれているタプル形式の文字列を構築します

Py_BuildValue()は常にタプルを構築しません。二つ以上の単位を含む、その書式文字列の形式は場合タプルを構成します。

。フォーマット単位を書式文字列である場合 、空の、それがNoneを返し、それは、1つのフォーマット単位を含む場合は、そのによって記載されているどのようなオブジェクト戻り
書式文字列が空の場合、それはNoneを返し、フォーマットだけ単位を含む場合、それをオブジェクトと一致するフォーマットで記述されたタイプの手段を返します。
フォーマットユニット。返すように強制する書式文字列を括弧、サイズ0または1つのタプル。

 

フォーマット文字列の括弧を与えるために、タプルサイズ0または1を押し戻されます。
以下の説明では、引用されたフォームは、フォーマット手段は、(丸)括弧内のエントリは、フォーマットユニットことPythonオブジェクト型である
括弧で返されるフォーマットユニットは、説明以下は、引用符で囲まれたフォーマットユニットはPythonのオブジェクト型は、
返され、そして内のエントリ[スクエア]括弧の種類が渡されるC値(S)です。

括弧内の値は、タイプCの関数に渡されます
文字スペース、タブ、コロンとコンマがフォーマット文字列では無視されている(しかしないようなフォーマットユニット内の「S#」)。これは作るために使用することができる
フォーマット文字列のスペース、タブ、コロンとコンマは次のようになります(「S#」形式のセルを除いて同様)無視します。これらの文字を使用すると、フォーマット文字列の読みやすさを向上させることができます。
長い形式の文字列を少し読みやすく。

 

 

 

"S"(文字列)のchar *]

Pythonオブジェクトにnull終端C文字列に変換します。C文字列ポインタがNULLである場合は、Noneを返します。

 

"S#"(文字列)[char型*、INT]

C文字列とその長さは、Pythonオブジェクトに変換します。C文字列ポインタがNULLの場合、長さは無視され、どれも返されません。

 

"Z"(文字列またはなし)のchar *]

「S」と同じです。

 

"Z#"(文字列またはなし)のchar *、INT]

"S#" と同じです。

 

"I"(整数)の[int]

Pythonの整数オブジェクトに無地C int型に変換します。

 

"B"(整数)[CHAR]

「私」と同じです。

 

"H"(整数)[短いINT]

「私」と同じです。

 

"L"(整数)[長いINT]

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

 

"C"(長さ1の文字列)[CHAR]

長さ1のPython文字列に文字を表すC int型に変換します。

 

"D"(フロート)[二]

Pythonの浮動小数点数へのダブルCに変換します。

 

"F"(フロート)[フロート]

「D」と同じです。

 

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

(1だけインクリメントされ、その参照カウントを除く)そのままPythonオブジェクトを渡します。渡されたオブジェクトがNULLポインタである場合には、引数を生産コールがエラーを発見し、例外を設定しているため、これが発生したことを想定しています。したがって、Py_BuildValue()はNULLを返しますが、例外は発生しません。例外はまだ提起されていない場合、PyExc_SystemErrorが設定されています。

 

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

「O」と同じです。

 

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

「O」と同じ、それはオブジェクトの参照カウントをインクリメントしない点が異なります。便利なオブジェクトが引数リスト内のオブジェクトのコンストラクタの呼び出しによって作成されたとき。

 

"O&"(オブジェクト)コンバータ、何か]

コンバータ関数を介してPythonオブジェクトには、何も変換します。関数は引数として(void *型と互換性があります)何も呼び出され、エラーが発生した場合は ``新しい「」Pythonオブジェクト、またはNULLを返す必要があります。

 

「(アイテム)」(タプル)[マッチング項目】

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

 

"[商品]"(リスト)[マッチング項目】

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

 

「{アイテム}」(辞書)[マッチング項目】

Pythonの辞書にC値のシーケンスに変換します。連続するC値の各ペアは、それぞれのキーと値として、辞書1つのアイテムを追加します。

 

フォーマット文字列に誤りがある場合は、PyExc_SystemErrorの例外が発生し、NULLが返されます。

例(右に、得られたPythonの値を呼び出しを左側):

 

    Py_BuildValue( "")なし
    Py_BuildValue( "I"、123)123 
    Py_BuildValue( "III"、123、456、789)(123、456、789)
    Py_BuildValue( "S"、 "こんにちは") 'ハロー'      
    Py_BuildValue(」 SS " "こんにちは"、 "世界")( 'こんにちは'、 '世界')      
    Py_BuildValue( "S#"、 "こんにちは"、4) '地獄'      
    Py_BuildValue( "()")()      
    Py_BuildValue("(I )」、123)(123)      
    Py_BuildValue( "(II)"、123、456)(123、456)      
    Py_BuildValue( "(I、I)"、123、456)(123、     456) 
    Py_BuildValue( "[I、i]は" 123、456)[123、456]      
    Py_BuildValue( "{S:私は、S:I}"、
                  "ABC"、123、 "DEF"、456){ 'ABC' 123、 'DEF':456}      
    Py_BuildValue( "((II)(II))(II)"、                    
                  1、2、3、4、5 、6)(((1,2)、(3,4))、(5、6))
公開された63元の記事 ウォン称賛52 ビュー40000 +

おすすめ

転載: blog.csdn.net/weixin_41521681/article/details/103200471