Matlab相当于Python的"无"

dzh*_*lil 8 python matlab

Matlab中是否有一个与Nonepython 大致相同的关键字?

我试图用它来标记函数的可选参数.我正在翻译以下Python代码

def f(x,y=None):
    if y == None:
        return g(x)
    else:
        return h(x,y)
Run Code Online (Sandbox Code Playgroud)

进入Matlab

function rtrn = f(x,y)
    if y == []:
        rtrn = g(x);
    else
        rtrn = h(x,y);
    end;
end
Run Code Online (Sandbox Code Playgroud)

正如您目前所看到的,我正在使用[]as None.有一个更好的方法吗?

Sil*_*ost 13

NaN 虽然不等同,但往往起到类似的作用.


Adr*_*son 11

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

来自MATLAB文档:

nargin和nargout函数使您能够确定调用函数的输入和输出参数的数量.然后,您可以使用条件语句根据参数的数量执行不同的任务.例如,

function c = testarg1(a, b) 
     if (nargin == 1)
         c = a .^ 2; 
     elseif (nargin == 2)
         c = a + b; 
     end
Run Code Online (Sandbox Code Playgroud)

给定单个输入参数,此函数将输入值平方.给定两个输入,它将它们加在一起.

  • 我还在if循环中添加了另一个步骤以捕获使用不正确数量的输入参数调用函数的情况,然后您可以将此标记为错误 (2认同)

Amr*_*mro 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
Run Code Online (Sandbox Code Playgroud)

...作为确保正确数量的参数的方法.在这种情况下,至少需要两个参数,最多四个.

如果未nargchk检测到错误,则执行正常恢复,否则将生成错误.例如,调用testFunc(1)生成:

Not enough input arguments.
Run Code Online (Sandbox Code Playgroud)

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

narginchk(2,4);
Run Code Online (Sandbox Code Playgroud)

您可以使用功能,如:存在的isEmpty 检查变量是否存在以及是否分别是空的:

if ~exist('c','var') || isempty(c)
  c = 10;
end
Run Code Online (Sandbox Code Playgroud)

它允许你调用你的函数,例如:testFunc(1,2,[],4)告诉它使用默认值,c但仍然给出一个值d

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

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

要查看传递参数和设置默认值的示例和其他替代方法,请查看此帖子及其注释.

  • 从那时起,引入了一个新的函数[`narginchk`](http://www.mathworks.com/help/matlab/ref/narginchk.html),它取代了上面看到的弃用的'nargchk` +`error`的使用 (2认同)