0

私はC++SDKを使用していますが、次のような関数があります(Pythonラッパーはありますが、ドキュメントはありません)。

getPos ( int uvId, float & u, float & v ) const 

渡された変数が変更されるようにPythonで指定するにはどうすればよいですか?

この例を試して、関数内のfloatを変更できるかどうかを確認しましたが、機能しなかったため、12.0を出力しました。

def change ( a ) :

    a = 35.0


b = 12.0

change ( b )

print b

では、Pythonで2つの外部フロートを変更できるこの関数をどのように呼び出すのですか?

関連している:

4

4 に答える 4

5

Pythonの場合:

def getPos(uvID):
    # compute u, v
    return u, v

# 
u, v = getPos(uvID)
于 2009-02-23T23:11:23.243 に答える
2

私の知る限り、Pythonは参照渡しをサポートしていないため、提案している正確なコードは機能しません(明らかに)。

C++ 関数の Python ラッパーを生成したツール (または人) は、この関数をサポートするために何らかの特別な処理を行っている必要があります (うまくいけば、それを使用できなくなります)。ラッパーを生成するために使用されたツールを知っていますか?

通常、このようなツールは、ある種のコンテナ データ タイプを生成します。

b.value = 12.0
change(b)
print b.value
于 2009-02-23T23:16:00.113 に答える
2

ctypesに頼る必要があります。

具体的には、https://docs.python.org/library/ctypes.html#passing-pointers-or-passing-parameters-by-referenceを参照してください。

于 2009-02-24T00:38:15.780 に答える
0

単純なケースでは、関数に新しい値を返すようにします。

より複雑なケースでは、オブジェクトまたはリストを渡して、それを変更することができます。

def foobar(alist):
    alist[0] = 10

blist = [42]
foobar(blist)
print blist[0]

編集:

C ++参照をラップするための標準的な方法はありません(基本的なPythonインターフェイスはCレベルであり、C ++ではありません)-したがって、Pythonインターフェイスがどのように実装されているかによって異なります-配列であるか、複数の値を返す可能性があります。boost.pythonがそれをどのように処理するかはわかりませんが、そこから開始するか、デバッガーを調べてパラメーターがどのように処理されるかを確認してください。

于 2009-02-23T23:05:20.247 に答える