Matlab相当于Python的“无”

时间:2009-11-15 13:23:19

标签: python matlab

Matlab中的关键字是否与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。有更好的方法吗?

3 个答案:

答案 0 :(得分:12)

NaN虽然不相同,但通常用于类似目的。

答案 1 :(得分:11)

在您的具体情况下。您可以使用nargin来确定调用函数时提供的输入参数的数量。

来自MATLAB documentation

  

nargin和nargout功能   使您能够确定输入的数量   和函数输出参数   打电话给。然后你可以使用   要执行的条件语句   不同的任务取决于   参数的数量。例如,

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

给定一个输入参数,这个   函数平方输入值。   给定两个输入,它会添加它们   在一起。

答案 2 :(得分: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.
  

更新:R2011b narginchk中引入了一项新功能,该功能取代了上面使用的已弃用的nargchk + error

narginchk(2,4);

您可以使用以下功能: exist isempty 来检查变量是否存在以及是否为空:

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

允许您调用您的函数,例如:testFunc(1,2,[],4)告诉它使用c的默认值,但仍为d提供值

您还可以使用 varargin 接受可变数量的参数。

最后,解析和验证命名输入的一种强大方法是使用 inputParser

要查看传递参数和设置默认值的示例和其他替代方法,请查看this post及其注释。