2017-04-13 44 views
5

私はPythonコードでいくつかのM-ファイルを使用するためにOct2Pyを使用しています。のは、私はこの単純な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)は最初の値を返すように思えます。私は2つを期待しています...誰も私が何をすべきか説明できますか?あなたが複数の出力を望んでいた場合、あなたは、単に両方の出力を要求するようOct2Pyの旧バージョン(3.xおよびそれ以上の年齢)のおかげで

答えて

5

は、出力引数の数は、Pythonの内部呼び出しから推測された

a, b = octave.toto(3) 

ただし、as of version 4.0あなたは今、明示的に4.0リリースノート

からの出力引数の所望の数

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

を指定するには、あなたの関数の呼び出しにnout kwargを使用する必要があります

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

関連する問題