varargin
可变长度输入参量列表
语法
描述
varargin 是函数定义语句中的一个输入变量,允许函数接受任意数量的输入参量。使用小写字符指定 varargin。在任何显式声明的输入项后,附加 varargin 作为最后一个输入参量。
在执行函数时,varargin 是一个 1×N 元胞数组,其中 N 是函数在显式声明的输入后收到的输入项数。如果该函数在显式声明的输入后未收到任何输入,则 varargin 是空元胞数组。
示例
在名称为 acceptVariableNumInputs.m 的文件中定义一个函数,接受个数不定的输入项,并显示每个输入项的值。
type acceptVariableNumInputsfunction acceptVariableNumInputs(varargin)
disp("Number of input arguments: " + nargin)
celldisp(varargin)
end
使用多个输入调用该函数。
acceptVariableNumInputs(ones(3),'some text',pi)Number of input arguments: 3
varargin{1} =
1 1 1
1 1 1
1 1 1
varargin{2} =
some text
varargin{3} =
3.1416
在名为 definedAndVariableNumInputs.m 的文件中定义一个函数,它有两个必需的输入,并且接受一定数量的附加输入。
type definedAndVariableNumInputsfunction definedAndVariableNumInputs(X,Y,varargin)
disp("Total number of input arguments: " + nargin)
formatSpec = "Size of varargin cell array: %dx%d";
str = compose(formatSpec,size(varargin));
disp(str)
end
使用多个输入调用该函数。
definedAndVariableNumInputs(7,pi,rand(4),datetime('now'),'hello')
Total number of input arguments: 5 Size of varargin cell array: 1x3
使用两个输入调用该函数。varargin 是空元胞数组。
definedAndVariableNumInputs(13,42)
Total number of input arguments: 2 Size of varargin cell array: 0x0
在名为 variableNumInputAndOutput.m 的文件中定义一个函数,它接受可变数目的输入和输出。
type variableNumInputAndOutputfunction varargout = variableNumInputAndOutput(varargin)
disp(['Number of provided inputs: ' num2str(length(varargin))])
disp(['Number of requested outputs: ' num2str(nargout)])
for k = 1:nargout
varargout{k} = k;
end
end
使用两个输入和三个输出调用该函数。
[d,g,p] = variableNumInputAndOutput(6,'Nexus')Number of provided inputs: 2 Number of requested outputs: 3
d = 1
g = 2
p = 3
不使用任何输入和输出再次调用该函数。
variableNumInputAndOutput
Number of provided inputs: 0 Number of requested outputs: 0
扩展功能
用法说明和限制:
如果您使用
varargin定义入口(顶层)函数的参量,代码生成器会生成带固定数目输入参量的 C/C++ 函数。生成代码时指定的参量个数决定参量的固定数目。您无法写入
varargin。如果要写入输入参量,请首先将输入参量复制到局部变量中。varargin的索引必须为编译时常量。
用法说明和限制:
您无法写入
varargin。如果要写入输入参量,请首先将输入参量复制到局部变量中。varargin的索引必须为编译时常量。
版本历史记录
在 R2006a 之前推出您可以在 HDL 模块属性架构设置为 MATLAB Datapath 的 MATLAB Function 模块中使用 varargin,以及在元胞数组中使用多索引输入参量。例如,您现在可以为以下代码片段生成 HDL 代码:
[x, y] = varargin{1:2};使用 varargin 指定可变数量的输入参量时的性能得到了改进。例如,在当前文件夹下名为 timingTest.m 的文件中,创建一个应接受一个输入但接受了多个输入的函数。
function timingTest(x,varargin) n = 1e6; tic for i = 1:n y = myFun(x,varargin{:}); end toc end function y = myFun(x,varargin) if nargin == 1 y = x; elseif nargin == 3 y = x + varargin{1} + varargin{2}; else y = NaN; end end
改进的程度取决于 varargin 是否为空。当 varargin 为空时,性能提升非常显著。
空
varargin- 通过运行timingTest(1)对以上代码的执行进行计时。代码的执行速度比上一版本大约快 22 倍。大致的执行时间是:R2022b:0.404 秒
R2023a:0.018 秒
非空
varargin- 通过运行timingTest(1,2,3)对以上代码的执行进行计时。该代码比上一版本大约快 2 倍。大致的执行时间是:R2022b:1.428 秒
R2023a:0.734 秒
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上进行计时的。
您可以为 HDL 模块属性架构设置为 MATLAB Datapath 的 MATLAB Function 模块中的函数生成 HDL 代码。这些函数可以使用输入参量 varargin。HDL 函数 checkhdl 可以使用 varargin 确定是否可以正确访问和初始化元胞数组。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)