Matlab-эквивалент Python "None" - PullRequest
       15

Matlab-эквивалент Python "None"

8 голосов
/ 15 ноября 2009

Есть ли в Matlab ключевое слово, которое примерно эквивалентно 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. Есть ли лучший способ сделать это?

Ответы [ 3 ]

12 голосов
/ 15 ноября 2009

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

11 голосов
/ 15 ноября 2009

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

из документации MATLAB :

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

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

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

7 голосов
/ 15 ноября 2009

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

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

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

Not enough input arguments.

ОБНОВЛЕНИЕ: в R2011b была введена новая функция narginchk, которая заменяет использование устаревшего nargchk + error, показанного выше:

narginchk(2,4);

Вы можете использовать такие функции, как: существующие и isempty , чтобы проверить, существует ли переменная и является ли она пустой соответственно:

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...