关于变量:如何在Python中通过ref传递值?

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中始终作为引用传递。所以在对象中进行包装会产生类似的效果。