2009-11-15 6 views
6

Есть ли ключевое слово в Matlab, которое примерно эквивалентно None в python?Матричный эквивалент Python «None»

Я пытаюсь использовать его, чтобы отметить необязательный аргумент функции. Я перевожу следующий код Python

def f(x,y=None): 
    if y == None: 
     return g(x) 
    else: 
     return h(x,y) 

в Matlab

function rtrn = f(x,y) 
    if y == []: 
     rtrn = g(x); 
    else 
     rtrn = h(x,y); 
    end; 
end 

Как вы можете видеть, в настоящее время я использую [] в None. Есть лучший способ сделать это?

+2

Что вы пытаетесь сделать в Matlab? –

ответ

10

в вашем конкретном случае. вы можете использовать nargin, чтобы определить, сколько входных аргументов здесь предоставляется при вызове функции.

из MATLAB documentation:

В Наргине и nargout функции позволяет вам определить, сколько входных и выходные аргументы функции вызываются. Затем вы можете использовать условные выражения для выполнения различных задач в зависимости от количества аргументов . Например,

function c = testarg1(a, b) 
    if (nargin == 1) 
     c = a .^ 2; 
    elseif (nargin == 2) 
     c = a + b; 
    end 

Учитывая один входной аргумент, эта функция квадратов значение входного сигнала. Учитывая два входа, он добавляет их вместе.

+2

Я бы добавил еще один шаг в цикле if, чтобы поймать случаи, когда функция вызывается с неправильным количеством входных аргументов, тогда вы можете отметить это как ошибку – Adrian

7

NaN в то время как не эквивалентен, часто служит аналогичной цели.

7

nargin, безусловно, самый простой способ сделать это. Кроме того, как правило, хорошая практика, чтобы проверить количество входных аргументов, используя nargchk:

function e = testFunc(a,b,c,d) 
    error(nargchk(2, 4, nargin, 'struct')); 

    % set default values 
    if nargin<4, d = 0; end 
    if nargin<3, c = 0; end 

    % .. 
    c = a*b + c*d; 

end 

... который действует как способ обеспечить правильное количество аргументов передается. В этом случае требуется минимум два аргумента, максимум четыре.

Если nargchk не обнаруживает ошибки, выполнение возобновляется нормально, в противном случае генерируется ошибка.Например, вызов testFunc(1) генерирует:

Not enough input arguments. 

UPDATE: Новая функция была введена в R2011b narginchk, который заменяет использование устаревшей nargchk + error видели выше:

narginchk(2,4); 

You могут использовать следующие функции: exist и isempty, чтобы проверить, существует ли переменная и является ли она пуста, соответственно:

if ~exist('c','var') || isempty(c) 
    c = 10; 
end 

, который позволяет вызывать ваши функции, такие как: testFunc(1,2,[],4) говорю это, чтобы использовать значение по умолчанию для c, но по-прежнему дает значение для d

Вы также можете использовать varargin, чтобы принять переменное количество аргументов.

Наконец мощное средство для анализа и проверок названных входов является использование inputParser

Чтобы посмотреть примеры и другие альтернативы передачи аргументов и установку значений по умолчанию, проверьте this post и комментарии, а также.

+2

С тех пор была введена новая функция ['narginchk '] (http://www.mathworks.com/help/matlab/ref/narginchk.html), который заменяет использование устаревшей ошибки' nargchk' + ', указанной выше – Amro

Смежные вопросы