在Python中更改函数内的基本(不可变)类型?

时间:2009-02-23 23:03:13

标签: python variables pass-by-reference

我正在使用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个外部浮点数?

相关:

4 个答案:

答案 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)

答案 3 :(得分:0)

对于简单的情况,函数返回新值。

对于更复杂的情况,您可以传入一个对象或一个列表并进行更改:

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

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

编辑:

对于包装C ++引用,没有任何标准方法(基本python接口在C级 - 而不是C ++) - 所以它取决于python接口的实现方式 - 它可能是数组,或返回多个值。我不确定boost.python是如何处理它的,但是你可能会从那里开始,或者在调试器下查看如何处理参数。