varargin
Lista de argumentos de entrada de longitud variable
Sintaxis
Descripción
varargin
es una variable de entrada en una instrucción de definición de función que permite que la función acepte cualquier número de argumentos de entrada. Especifique varargin
utilizando caracteres en minúscula. Después de todas las entradas declaradas explícitamente, incluya varargin
como el último argumento de entrada.
Cuando la función se ejecuta, varargin
es un arreglo de celdas de 1 por N, donde N es el número de entradas que la función recibe después de las entradas declaradas explícitamente. Si la función no recibe ninguna entrada después de las entradas declaradas explícitamente, varargin
es un arreglo de celdas vacío.
Ejemplos
Número variable de entradas de funciones
Defina una función en un archivo llamado acceptVariableNumInputs.m
que acepte un número variable de entradas y muestre los valores de cada entrada.
type acceptVariableNumInputs
function acceptVariableNumInputs(varargin) disp("Number of input arguments: " + nargin) celldisp(varargin) end
Llame a la función con varias entradas.
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
varargin
y entradas declaradas
Defina una función en un archivo llamado definedAndVariableNumInputs.m
que espere dos entradas y acepte un número adicional de entradas.
type definedAndVariableNumInputs
function 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
Llame a la función con varias entradas.
definedAndVariableNumInputs(7,pi,rand(4),datetime('now'),'hello')
Total number of input arguments: 5 Size of varargin cell array: 1x3
Llame a la función con dos entradas. varargin
es un arreglo de celdas vacío.
definedAndVariableNumInputs(13,42)
Total number of input arguments: 2 Size of varargin cell array: 0x0
Número variable de entradas y salidas
Defina una función en un archivo llamado variableNumInputAndOutput.m
que acepte un número variable de entradas y salidas.
type variableNumInputAndOutput
function 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
Llame a la función con dos entradas y tres salidas.
[d,g,p] = variableNumInputAndOutput(6,'Nexus')
Number of provided inputs: 2 Number of requested outputs: 3
d = 1
g = 2
p = 3
Vuelva a llamar a la función sin entradas ni salidas.
variableNumInputAndOutput
Number of provided inputs: 0 Number of requested outputs: 0
Crear un envoltorio de función
En un archivo de su carpeta de trabajo, cree un envoltorio para la función de representación que representa una línea roja. La función redplot
acepta una lista de argumentos de entrada de longitud variable y devuelve una lista de argumentos de salida de longitud variable. Establece el color de la línea en rojo y envía otros valores de entrada a la función plot
. El envoltorio de función permite pasar a redplot
las mismas entradas que a plot
y no especificar que el color de la línea es rojo.
type redplot.m
function varargout = redplot(varargin) [varargout{1:nargout}] = plot(varargin{:},'Color',[1,0,0]); end
Utilice redplot
para crear una gráfica de líneas.
x = 0:pi/100:2*pi; y = sin(x); redplot(x,y)
Vuelva a llamar a redplot
y especifique argumentos de entrada y salida que pasar a la función plot
.
h = redplot(x,y,'Marker','o','MarkerEdgeColor','green');
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Si utiliza
varargin
para definir un argumento para una función de punto de entrada (de nivel superior), el generador de código genera una función de C/C++ con un número fijo de argumentos de entrada. El número de argumentos que usted especifica cuando genera código determina el número fijo de argumentos.No puede escribir en
varargin
. Si desea escribir en argumentos de entrada, copie primero los argumentos de entrada en una variable local.El índice en
varargin
debe ser una constante en tiempo de compilación.
Generación de código HDL
Genere código Verilog y VHDL para diseños FPGA y ASIC mediante HDL Coder™.
Notas y limitaciones de uso:
No puede escribir en
varargin
. Si desea escribir en argumentos de entrada, copie primero los argumentos de entrada en una variable local.Para utilizar
varargin
en un bloque MATLAB function con la propiedad del bloque HDL Architecture establecida enMATLAB Datapath
:Solo puede crear arreglos de celdas utilizando
varargin
. No puede utilizar otras técnicas de inicialización, como el uso de la funcióncell
o la creación de un arreglo de celdas con llaves, comocellArr = {1,2,3}
.No puede crear indexar varios elementos en arreglos de celdas. Por ejemplo, este fragmento de código arroja un error en la generación de código HDL.
[x, y] = varargin{1:2};
Historial de versiones
Introducido antes de R2006aR2023a: Rendimiento mejorado al especificar cero o más entradas
Especificar un número variable de argumentos de entrada utilizando varargin
muestra un rendimiento mejorado. Por ejemplo, en un archivo llamado timingTest.m
de la carpeta actual, cree una función que espere una entrada y acepte un número de entradas adicionales.
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
El grado de mejora dependerá de si varargin
está vacía. La mejora del rendimiento es más significativa cuando varargin
está vacía.
varargin
vacía: cronometre este código ejecutandotimingTest(1)
. El código es aproximadamente 22 veces más rápido que en la versión anterior. Los tiempos de ejecución aproximados son:R2022b: 0,404 s
R2023a: 0,018 s
varargin
no vacía: cronometre este código ejecutandotimingTest(1,2,3)
. El código es aproximadamente 2 veces más rápido que en la versión anterior. Los tiempos de ejecución aproximados son:R2022b: 1,428 s
R2023a: 0,734 s
El código se cronometró en un sistema de prueba Windows® 10, Intel® Xeon® CPU E5-1650 v4 con 3,60 GHz.
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)