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
。有更好的方法吗?
答案 0 :(得分:12)
NaN
虽然不相同,但通常用于类似目的。
答案 1 :(得分:11)
在您的具体情况下。您可以使用nargin
来确定调用函数时提供的输入参数的数量。
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及其注释。