2017-04-13 70 views
5

我使用Oct2Py爲了在我的Python代碼中使用一些M文件。比方說,我有這個簡單的Matlab的功能:Oct2Py只返回第一個輸出參數

function [a, b] = toto(c); 
    a = c; 
    b = c + 1; 
end 

,如果我把它稱爲八度會發生什麼明顯:

>> [x,y] = toto(3) 
x = 3 
y = 4 

現在,如果我把它在Python,使用oct2py:

from oct2py import octave 
my_dir = "D:\\My_Dir" 
octave.addpath(my_dir) 
a,b = octave.toto(3) 

這將返回:

TypeError: 'int' object is not iterable

似乎octave.toto(n)只返回第一個值,當我期望兩個...任何人都可以向我解釋我應該做什麼?由於

回答

5

在舊版本Oct2Py的(3.x和以上),輸出參數的數量從內Python的通話推斷,所以如果你想多路輸出,只需將要求兩個輸出

a, b = octave.toto(3) 

然而,as of version 4.0您現在需要使用nout kwarg你的函數調用來顯式指定的輸出參數所需數量

a, b = octave.toto(3, nout=2) 

從4.0發行說明

Removed inferred nout for Octave function calls; it must be explicitly given if not 1. The old behavior was too surprising and relied on internal logic of the CPython interpreter.

+0

我明白不同之處!但是,此行返回: TypeError:'int'對象不可迭代。 就像我寫道:[a,b] = octave.test(3)...它真的看起來像octave.test(n)給出一個單一的輸出... – Telergoel

+0

@Telergoel它絕對應該工作。你能否將你的函數名改爲與核心庫函數不衝突的東西?此外,請顯示您正在嘗試使用的確切代碼 – Suever

+0

我更改了函數的名稱,不再存在衝突,但仍然是TypeError。如果需要,我可以分享我的確切代碼行,但我真的用上面的簡單代碼進行測試,並且它確實不起作用。 – Telergoel