How to pass values by ref in Python?
基本上我使用的是一个应用程序的C++ API,但是没有它的Python访问的引用。引用传递一个变量,如下所示:
1 | GetPoint ( Point &p, Object obj ) |
那么我该如何翻译成python呢?是否有旁路参考符号?
在Python中没有旁路引用符号。
只需修改传入点,您的修改将从调用函数中可见。
1 2 3 4 5 6 7 8 9 10 11 | >>> 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绑定可能已将该签名转换为:
1 | Point GetPoint(Object obj) |
甚至:
1 | Point Object::GetPoint() |
因此,请查看绑定的文档或源。
我很确定python将引用的值传递给一个变量。这篇文章可能比我解释得更好。
在Python中没有按符号引用-正确的操作取决于您的API。问自己的问题是谁拥有从C++传递到Python的对象。有时,将对象复制到Python对象中是最简单的方法,但这并不总是最好的方法。
您可能对boost.python感兴趣,http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html
对象在Python中始终作为引用传递。所以在对象中进行包装会产生类似的效果。