11

我正在使用 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) 只返回第一个值,当我期望两个时......有人可以向我解释我应该做什么吗?谢谢

4

1 回答 1

12

在旧版本的 Oct2Py(3.x 和更早版本)中,输出参数的数量是从 Python 中的调用推断出来的,因此如果您想要多个输出,您只需请求两个输出

a, b = octave.toto(3)

但是,从 4.0 版开始,您现在需要在nout函数调用中使用 kwarg 来显式指定所需的输出参数数量

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

来自 4.0 发行说明

删除了对 Octave 函数调用的推断nout;如果不是 1,则必须明确给出。旧行为太令人惊讶,并且依赖于 CPython 解释器的内部逻辑。

于 2017-04-13T14:34:14.680 回答