0

我正在使用一个 C++ SDK,其中有一个类似的函数(它有一个 python 包装器,但没有文档):

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

如何在 Python 中指定以便更改传递的变量?

我尝试了这个例子,看看我是否可以修改函数内部的浮点数,但它不起作用,所以打印了 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 回答