我正在使用C ++ SDK,其中有一个函数(它有一个python包装器,但不是docs):
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个外部浮点数?
相关:
答案 0 :(得分:5)
在Python中:
def getPos(uvID):
# compute u, v
return u, v
#
u, v = getPos(uvID)
答案 1 :(得分:2)
据我所知,Python不支持call-by-reference,因此你建议的确切代码不起作用(显然)。
为C ++函数生成Python包装器的工具(或人)必须做一些特殊的事情来支持这个函数(希望,否则你将无法使用它)。你知道用什么工具来生成包装器吗?
通常这样的工具会生成某种容器数据类型:
b.value = 12.0
change(b)
print b.value
答案 2 :(得分:2)
你将不得不诉诸ctypes。
具体来说,请参阅https://docs.python.org/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference
答案 3 :(得分:0)
对于简单的情况,函数返回新值。
对于更复杂的情况,您可以传入一个对象或一个列表并进行更改:
def foobar(alist):
alist[0] = 10
blist = [42]
foobar(blist)
print blist[0]
编辑:
对于包装C ++引用,没有任何标准方法(基本python接口在C级 - 而不是C ++) - 所以它取决于python接口的实现方式 - 它可能是数组,或返回多个值。我不确定boost.python是如何处理它的,但是你可能会从那里开始,或者在调试器下查看如何处理参数。