我使用Oct2Py在我的Python代码中使用一些M文件。让我们说我有这个简单的Matlab函数:
function [a, b] = toto(c);
a = c;
b = c + 1;
end
如果我在Octave中调用它会发生什么事情显然是:
>> [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'对象不可迭代
似乎octave.toto(n)只返回第一个值,当我期待两个......有人可以向我解释我应该做什么吗?感谢
答案 0 :(得分:6)
在旧版本的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发行说明
为Octave函数调用删除了推断的
nout
;必须明确给出,如果不是1.旧的行为太令人惊讶,并依赖于CPython解释器的内部逻辑。