2009-02-23 193 views
3

基本上我使用的是應用程序的C++ API,但沒有提及它的python訪問。一個變量通過ref傳遞,如下所示:如何在Python中通過ref傳遞值?

GetPoint (Point &p, Object obj) 

那麼我該如何轉換爲Python?有沒有通過ref符號?

+0

有點相關的問題與一些相關的答案:http://stackoverflow.com/questions/534375/passing-values-in-python – Dana 2009-02-23 18:03:39

+0

感謝忘了那一個。 – 2009-02-23 18:08:42

+1

我知道這是一個老問題,但對於未來的讀者:當將Python與其他語言的API一起使用時,您應該能夠直接訪問成員,而不是使用getter和setter。如果Python綁定是好的,那麼這些屬性實際上是[properties](http://docs.python.org/library/functions.html#property),並且您將在不知道它的情況下通過訪問器重定向。 Getters和setter不是pythonic,所以我在使用wxPython或從Jython使用Swing時沒有使用它們。 – 2012-02-02 00:29:45

回答

4

Python中沒有通過引用符號傳遞。

只需修改傳入的點,您的修改將從調用函數中可見。

>>> def change(obj): 
...  obj.x = 10 
... 
>>> class Point(object): x,y = 0,0 
... 
>>> p = Point() 
>>> p.x 
0 
>>> change(p) 
>>> p.x 
10 

...

所以我應該通過它像:用GetPoint(P,OBJ)?

是的,雖然Iraimbilanja有一個好點。綁定可能已經改變了調用返回點而不是使用out參數。

2

我很確定Python將引用的值傳遞給一個變量。 This article或許可以解釋得比我更好。

1

對象總是作爲Python中的參考傳遞。所以包裝在對象中產生類似的效果。

3

這可能是因爲你的Python綁定已經把該簽名改成:

Point GetPoint(Object obj) 

甚至:

Point Object::GetPoint() 

所以看爲綁定文檔或來源。

1

Python中沒有符號的引用 - 正確的事情取決於您的API。問自己的問題是誰擁有從C++傳遞給python的對象。有時,最簡單的方法就是將對象複製到python對象中,但這並不總是最好的做法。

你可能有興趣在Boost.Python的http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html