Matlab中Python的"None"等价物

9 投票
4 回答
18213 浏览
提问于 2025-04-15 16:02

在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。有没有更好的方法呢?

4 个回答

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,它取代了上面提到的已弃用的 nargchkerror

narginchk(2,4);

你可以使用像 existisempty 这样的函数来检查一个变量是否存在,以及它是否为空:

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

这让你可以像这样调用你的函数:testFunc(1,2,[],4),告诉它使用 c 的默认值,同时给 d 一个值。

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

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

想要查看传递参数和设置默认值的示例及其他替代方法,可以查看 这篇文章及其评论。

12

NaN虽然不是完全相等的,但通常有着类似的用途。

12

在你的具体情况下,你可以使用 nargin 来判断在调用这个函数时提供了多少个输入参数。

根据 MATLAB 的文档

narginnargout 这两个函数可以让你知道一个函数被调用时有多少个输入和输出参数。然后你可以用条件语句,根据参数的数量来执行不同的任务。例如,

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

如果只给一个输入参数,这个函数会把输入的值平方。如果给两个输入,它会把这两个数加起来。

撰写回答