基本上我使用的是一个应用程序的C++ API,但是没有它的Python访问的引用。引用传递一个变量,如下所示:
GetPoint ( Point &p, Object obj )
那么我该如何翻译成python呢?是否有旁路参考符号?
一些相关问题和一些相关答案:stackoverflow.com/questions/534375/passing-values-in-python
谢谢你忘了那个。
我知道这是一个古老的问题,但对于未来的读者来说:当将Python与其他语言的API一起使用时,您应该能够直接访问成员,而不是使用getter和setter。如果Python绑定有任何好处,那么属性实际上就是属性,您将通过访问器进行重定向,而不知道它。getter和setter并不是很像python,所以我强调在使用wxpython或从jython挥杆时不要使用它们。
在Python中没有旁路引用符号。
只需修改传入点,您的修改将从调用函数中可见。
>>> def change(obj):
... obj.x = 10
...
>>> class Point(object): x,y = 0,0
...
>>> p = Point()
>>> p.x
0
>>> change(p)
>>> p.x
10
…
So I should pass it like: GetPoint (p, obj)?
是的,虽然伊拉姆比兰扎有一个很好的观点。绑定可能已更改调用以返回该点,而不是使用out参数。
您的python绑定可能已将该签名转换为:
Point GetPoint(Object obj)
甚至:
Point Object::GetPoint()
因此,请查看绑定的文档或源。
谢谢,对于状态来说,返回是一个布尔值,但是必须传递该点,否则,它将抛出错误数量的args异常。
我很确定python将引用的值传递给一个变量。这篇文章可能比我解释得更好。
在Python中没有按符号引用-正确的操作取决于您的API。问自己的问题是谁拥有从C++传递到Python的对象。有时,将对象复制到Python对象中是最简单的方法,但这并不总是最好的方法。
您可能对boost.python感兴趣,http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html
对象在Python中始终作为引用传递。所以在对象中进行包装会产生类似的效果。
这是正确的答案。python对象总是以相同的方式传递(通过引用)。有些对象(例如int)是不可变的,给人的印象是通过值传递…不,也是这样的……永远!-)