2009-11-15 1216 views
6

在Matlab中是否有一个关键字与Python中的None大致相当?Matlab的“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。有一个更好的方法吗?

+2

你想在Matlab中做什么? – 2009-11-15 13:25:59

回答

10

在您的具体情况。您可以使用nargin来确定调用该函数时在此处提供了多少个输入参数。

MATLAB documentation

的nargin和nargout功能 使您能够确定一个函数有多少输入 和输出参数调用 。然后,您可以使用 条件语句执行 不同的任务,具体取决于参数个数 。例如,

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

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

+2

我还要在if循环中添加另一个步骤来捕获使用不正确的输入参数数量调用函数的情况,然后可以将此标记为错误 – Adrian 2009-11-17 10:38:46

7

NaN虽然不等同,但常常起到类似的作用。

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. 

UPDATE:

narginchk(2,4); 

您:一个新的函数,而R2011b narginchk,它取代了使用弃用nargchk + error上方观察的引入可以使用如下功能:exist and isempty检查变量是否存在以及它是否分别空是:

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

,它允许你打电话给你的功能,如:testFunc(1,2,[],4)告诉它使用的默认值c,但仍然给人一种价值为d

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

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

要查看示例和传递参数和设置默认值的其他替代方案,检查this post,其意见为好。

+2

自那时起,引入了一个新函数['narginchk '](http://www.mathworks.com/help/matlab/ref/narginchk.html),它取代了上面使用过的'nargchk' +'error' – Amro 2013-06-15 13:04:23