在Python中更改函数内的基本(不可变)类型? 我使用C++ SDK,在那里有一个函数,比如它有一个Python包装,但不是DOCS:< /P> getPos ( int uvId, float & u, float & v ) const

在Python中更改函数内的基本(不可变)类型? 我使用C++ SDK,在那里有一个函数,比如它有一个Python包装,但不是DOCS:< /P> getPos ( int uvId, float & u, float & v ) const,python,variables,pass-by-reference,Python,Variables,Pass By Reference,如何在Python中指定,以便更改传递的变量 我尝试了这个示例,想看看是否可以修改函数中的浮动,但它不起作用,所以打印了12.0: def change ( a ) : a = 35.0 b = 12.0 change ( b ) print b 那么如何调用这个函数,以便在Python中更改2个外部浮点 相关的: 对于简单的情况,让函数返回新值 对于更复杂的情况,您可以传入一个对象或列表,并对其进行更改: def foobar(alist): alist[0] =

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

我尝试了这个示例,想看看是否可以修改函数中的浮动,但它不起作用,所以打印了12.0:

def change ( a ) :

    a = 35.0


b = 12.0

change ( b )

print b
那么如何调用这个函数,以便在Python中更改2个外部浮点

相关的:


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

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

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

blist = [42]
foobar(blist)
print blist[0]
编辑:

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

在python中:

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

# 
u, v = getPos(uvID)

据我所知,Python不支持引用调用,因此您建议的确切代码显然不起作用

为C++函数生成Python包装器的工具或人必须做一些特殊的事情来支持这个函数,否则你就不能使用它。你知道用什么工具生成包装器吗

通常,像这样的工具会生成某种容器数据类型:

b.value = 12.0
change(b)
print b.value

你将不得不求助于


具体地说,请参阅

谢谢,但是GETPOS函数,更多的是C++,我不能更改它们。所有东西都是用Python包装的,所以我想一定有办法使用它。我已经添加了相关问题的链接,看看arg for Operation函数是如何处理的:@Joan Venge:Basic type在Python中没有任何意义。我想你说的是不可变类型。或者您可能正在谈论C语言类型。您可能需要更新您的问题。谢谢,我还以为它们在python中也被称为基本类型。所以所有的字符串、整数、浮点数都是不可变的?元组也是如此。可能还有其他一些事情。但在爪哇和C++中原始的东西一般都是Python中不可变的对象,所以它们类似于其他语言。谢谢,他们使用SWIG,但我不知道它们如何能在不改变返回类型的情况下做到这一点。公平地说,所有的东西都可以通过引用来调用,只是数字是不可变的。因此,您不是在函数中更改绑定到名称a的对象的属性,而是将a重新绑定到一个完全不同的对象。谢谢Mike,这就是我所想的。我不是Python专家,但我认为一切都是通过复制按值传递的。只是因为所有的东西都是一个对象,所以被复制的东西总是一个引用是的,听起来很混乱。所以,你总是有对某个对象引用的副本。但是,有些对象(如列表)是可以更改的,而有些对象(如数字或元组)是不能更改的,它们是不可变的。+1:多个返回值-这通常是C/C++代码背后的基本含义。谢谢大家,但在上面的getUV函数中,他们并没有这样做,希望他们这样做,但没有。在这种情况下,你必须编写自己的API来让C++的程序适合Python。谢谢,我希望我可以,但它是第三方软件。我不敢相信他们忽略了这一点。