2017-04-13 73 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