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.有一个更好的方法吗?
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)
给定单个输入参数,此函数将输入值平方.给定两个输入,它将它们加在一起.
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:Run Code Online (Sandbox Code Playgroud)narginchk(2,4);
您可以使用功能,如:存在和的isEmpty 检查变量是否存在以及是否分别是空的:
if ~exist('c','var') || isempty(c)
c = 10;
end
Run Code Online (Sandbox Code Playgroud)
它允许你调用你的函数,例如:testFunc(1,2,[],4)告诉它使用默认值,c但仍然给出一个值d
您还可以使用varargin接受可变数量的参数.
最后,解析和验证命名输入的一种强大方法是使用inputParser
要查看传递参数和设置默认值的示例和其他替代方法,请查看此帖子及其注释.