2017-04-13 20 views
5

Python kodumda bazı M dosyalarını kullanmak için Oct2Py kullanıyorum. Ben Octave diyoruz ne olurOct2Py sadece ilk çıkış argümanını döndürüyor

function [a, b] = toto(c); 
    a = c; 
    b = c + 1; 
end 

besbelli: ı bu basit Matlab işlevi var diyelim Şimdi Python dersek

>> [x,y] = toto(3) 
x = 3 
y = 4 

, oct2py kullanarak:

from oct2py import octave 
my_dir = "D:\\My_Dir" 
octave.addpath(my_dir) 
a,b = octave.toto(3) 

Bu döner:

TypeError: 'int' object is not iterable

Görünüşe göre octave.toto (n) sadece ilk değeri verir, iki beklediğimde ... Yapmam gerekeni bana açıklayabilir mi? Birden çıkışları isteseydi, sadece her iki çıkışları talep edeceğini böylece Oct2Py eski sürümleri (3.x ve üstü) olarak teşekkür

cevap

5

, çıkış argüman sayısı, Python içinde çağrısından çıkarımlandı

a, b = octave.toto(3) 

Ancak as of version 4.0 artık açıkça 4.0 Release itibaren

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

Notları çıkış argümanları istenen sayıda belirtmek için işlev çağrısına nout kwarg kullanmak gerekir

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

Farkı anlıyorum! Ancak bu satır şu satırları döndürür: TypeError: 'int' nesnesi yinelenemez. Tam olarak yazmışım gibi: [a, b] = octave.test (3) ... Bu gerçekten octave.test gibi görünüyor (n) tek bir çıkış verir ... – Telergoel

+0

@Telergoel Kesinlikle işe yaramalı. İşlev adınızı bir çekirdek kitaplık işleviyle çakışmayan bir şeye değiştirebilir misiniz? Ayrıca, lütfen – Suever

+0

'u kullanmaya çalıştığınız tam kodu gösteriyorum. İşlevimin adını değiştirdim, artık bir çakışma yok ama yine de TypeError. Gerekirse tam kod satırlarımı paylaşabilirim ancak yukarıdaki basit olanlarla gerçekten test ediyorum ve gerçekten işe yaramıyor. – Telergoel

İlgili konular