2009-02-23 31 views
0

我使用的是C++ SDK那裏就像是一個函數(它有一個Python包裝,但不是文檔):在Python中更改函數內部的基本(不可變)類型?

getPos (int uvId, float & u, float & v) const 

如何在Python規定,以使傳遞的變量發生變化?

我試過了這個例子,看看我是否能修改函數內部漂浮物,但它沒有工作,所以印刷12.0:

def change (a) : 

    a = 35.0 


b = 12.0 

change (b) 

print b 

那麼,如何調用這個函數,我可以改變2外部漂浮在Python中?

相關:

+0

我已經添加了鏈接到相關的問題 – jfs 2009-02-23 23:16:07

+0

查看如何爲`操作()的ARG`函數進行處理:http://stackoverflow.com/questions/540427/c-to- python-via-swig-cant-get-void-parameters-hold-their-value – jfs 2009-02-23 23:25:31

+0

@Joan Venge:「基本類型」在Python中沒有任何意義。我認爲你在談論「不可變」的類型。或者你可能正在談論C語言類型。你可能想更新你的問題。 – 2009-02-24 00:24:53

回答

2

據我所知,Python不支持調用 - 參考,所以你的建議確切的代碼不工作(明顯)。

爲C++函數生成Python包裝的工具(或人物)必須做一些特殊的事情來支持這個函數(希望或者你將無法使用它)。你知道什麼工具被用來生成包裝?

通常這樣的工具將產生某種容器數據類型:

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

對於簡單的情況下,有函數返回新值。

對於更復雜的情況下,你可以通過在一個對象或列表,並有改變:

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

blist = [42] 
foobar(blist) 
print blist[0] 

編輯:

將C++的引用沒有任何標準方式(基本的Python接口是在C級 - 而不是C++) - 所以它取決於python接口如何實現 - 它可能是數組,或者返回多個值。我不確定boost.python如何處理它,但你可能會從那裏開始,或者可能在調試器下看看如何處理參數。

5

在Python:

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

# 
u, v = getPos(uvID) 
相關問題