作者Gwaewluin (神无月 孝臣)
看板MATLAB
标题Re: [问题] nargin & nargout在程式撰写时的用法?
时间Wed Apr 11 11:31:35 2007
※ 引述《johnny4003 (股市巨量下跌)》之铭言:
: 各位大大~
: 我在撰写的时候需要用到nargin&nargout,
: 但是在Help看不出要怎麽用?
: 谢谢~
: function [x0, y0] = myplot(x, y, npts, angle, subdiv)
: % MYPLOT Plot a function.
: % MYPLOT(x, y, npts, angle, subdiv)
: % The first two input arguments are
: % required; the other three have default values.
: ...
: if nargin < 5, subdiv = 20; end
: if nargin < 4, angle = 10; end
: if nargin < 3, npts = 25; end
: ...
: if nargout == 0
: plot(x, y)
: else
: x0 = x;
: y0 = y;
: end
nargin和nargout在比较大型的函式里会用到(toolbox应该几乎都有)
举例来说
有个函式一开始对於输入与输出的设定是长这样子
function [ A B C D ] = myfun( a , b , c , d )
我们要使用myfun这个函式的话
多半都是直接用[ A B C D ] = myfun( a , b , c , d )即可
但事实上,可以使用nargin和nargout来做很多变化
像是我们输入可以这样来写myfun( a , b )(输出的部份稍後讲,这里先讲输入)
只输入a和b,但是c和d没有输入,运算时会需要用到怎麽办?
这时候可以使用nargin来帮c和d做一个像是预设值的动作
如果我们输入里有c和d,那麽後面运算就用我们输入的c和d来运算
如果我们输入里没有c和d,那麽後面的运算就使用函式内建的预设值来运算
而判断的方法就是使用nargin
nargin可以判断你输入了几个变数进函式来
以前面的例子,只输入a和b的话,nargin就会等於2
所以我们只需要在程式一开始加点判断式来给预设值即可
if nargin == 3 % (假设输入abc而没有输入d)
d = 某数预设值 ;
elseif nargin == 2 % (假设输入ab而没有输入cd)
d = 某数预设值 ;
c = 某数预设值 ;
end
使用这个方法可以省掉一些麻烦,像是某些迭代需要输入的停止条件ε
当此次iteration的运算结果与上一次iteration运算结果差异小於ε时运算结束
我们可以每次都输入个ε让程式用
但如果觉得这样每次都输入很麻烦的话
我们也可以利用nargin来给预设值
不想输入ε的话就不要输入
判断式检查nargin发现少一个输入的话,自动给个预设的ε就好
而nargout的话与nargin很类似,是判断输出有几个用的
像是前面的例子
我们使用函式时也可以写[ A B ] = myfun( a , b , c , d )
这样的话nargout的值为2
会需要用到nargout是因为有些资讯如果觉得不是那麽必要的话
可以使用nargout来判断需不需要为那些不很必要的资讯做运算
上面的写法输出只有A和B,C和D可能是在这次使用没有需要要看的资讯
那就使用nargout来判断输出只要有两个
C和D就不要做运算了,来节省些时间
nargin和nargout的用法大致是这样
总之就是来判断这次要使用该函式时有输入的多少个变数,以及需要输出多少个变数
--
Deserves death! I daresay he does. Many that live deserve death. And some die
that deserve life. Can you give that to them? Then be not too eager to deal out
death in the name of justice, fearing for your own safty. Even the wise cannot
see all ends.
Gandalf to Frodo
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.25.235
1F:推 Ysen:这个要M一下@@,G大真是强.. 04/11 12:40
2F:推 KevinT:详细 推!! 04/11 14:28
3F:推 cute1888:推 我搞懂了ㄟ!! 04/11 17:06
4F:推 oct:nargin & nargout用法书上倒是还找得到,但是说到varargin和 04/11 17:28
5F:→ oct:varargout, 书上似乎都没有很明确的使用方法 04/11 17:29
6F:→ oct:只大略知道这两个用在不确定输入输出的情况 04/11 17:29
7F:→ oct:但是如果只是这样的功能,不是用 nargin & nargout就可以达成 04/11 17:30
8F:→ oct:了吗? 04/11 17:30
9F:推 bylankai:nargin和nangout就是指varargin和varargout的个数啊 04/11 17:53
10F:→ bylankai:前者用来判断 後者用来给这个function输入和输出参数 04/11 17:56
11F:推 CDavid:有看有推 08/30 16:16