2009-11-15 122 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