2017-04-13 26 views
5

Tôi đang sử dụng Oct2Py để sử dụng một số tệp M trong mã Python của mình. Hãy nói rằng tôi có đơn giản này Matlab chức năng:Oct2Py chỉ trả lại đối số đầu ra đầu tiên

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

gì sẽ xảy ra nếu tôi gọi nó trong Octave là rõ ràng:

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

Bây giờ nếu tôi gọi nó bằng Python, sử dụng oct2py:

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

Trả lại:

TypeError: 'int' object is not iterable

Có vẻ như octave.toto (n) chỉ trả về giá trị đầu tiên, khi tôi mong đợi hai ... Bất cứ ai có thể giải thích cho tôi những gì tôi nên làm không? Cảm ơn

Trả lời

5

Trong các phiên bản cũ của Oct2Py (3.x trở lên), số lượng các đối số đầu ra được suy ra từ các cuộc gọi trong Python, vì vậy nếu bạn muốn nhiều kết quả đầu ra, bạn chỉ đơn giản là sẽ yêu cầu cả hai kết quả đầu ra

a, b = octave.toto(3) 

Tuy nhiên, as of version 4.0 bây giờ bạn cần phải sử dụng nout kwarg để gọi chức năng của bạn để xác định một cách rõ ràng số lượng mong muốn của các đối số đầu ra

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

Từ Release 4,0 Ghi chú

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

Tôi hiểu sự khác biệt! Tuy nhiên dòng này trả về: LoạiError: đối tượng 'int' không thể lặp lại được. Chính xác như thể tôi đã viết: [a, b] = octave.test (3) ... Nó thực sự trông giống như octave.test (n) cho một đầu ra duy nhất ... – Telergoel

+0

@Telergoel Nó chắc chắn sẽ hoạt động. Bạn có thể thay đổi tên hàm của bạn thành cái gì đó không xung đột với chức năng thư viện lõi không? Ngoài ra, vui lòng hiển thị mã chính xác mà bạn đang cố sử dụng – Suever

+0

Tôi đã thay đổi tên chức năng của mình, không còn xung đột nữa mà vẫn là TypeError. Tôi có thể chia sẻ các dòng mã chính xác của mình nếu cần thiết nhưng tôi thực sự đang thử nghiệm với các dòng mã đơn giản ở trên và nó thực sự không hoạt động. – Telergoel

Các vấn đề liên quan