Tel*_*oel 5 python matlab octave oct2py
我正在使用Oct2Py在我的Python代码中使用一些M文件.假设我有这个简单的Matlab函数:
function [a, b] = toto(c);
a = c;
b = c + 1;
end
Run Code Online (Sandbox Code Playgroud)
如果我在Octave中调用它会发生什么:
>> [x,y] = toto(3)
x = 3
y = 4
Run Code Online (Sandbox Code Playgroud)
现在如果我用Python调用它,使用oct2py:
from oct2py import octave
my_dir = "D:\\My_Dir"
octave.addpath(my_dir)
a,b = octave.toto(3)
Run Code Online (Sandbox Code Playgroud)
返回:
TypeError:'int'对象不可迭代
似乎octave.toto(n)只返回第一个值,当我期待两个......有人可以向我解释我应该做什么吗?谢谢
在旧版本的Oct2Py(3.x及更早版本)中,输出参数的数量是从Python中的调用中推断出来的,所以如果你想要多个输出,你只需要两个输出
a, b = octave.toto(3)
Run Code Online (Sandbox Code Playgroud)
但是,从版本4.0开始,您现在需要将nout
kwarg用于函数调用,以显式指定所需数量的输出参数
a, b = octave.toto(3, nout=2)
Run Code Online (Sandbox Code Playgroud)
从4.0发行说明
删除推断
nout
的Octave函数调用; 必须明确给出,如果不是1.旧的行为太令人惊讶,并依赖于CPython解释器的内部逻辑.