Curso Intermedio de Python N06. Argumentos posicionales, Args

By rafaelaquino on 9/6/2023

Cordiales Saludos

![06portada.png](Image from post)
### Argumentos Ya habíamos abordado en publicaciones anteriores el tema de **argumentos** dentro de las características básicas de las funciones. Principalmente los **posicionales** que es una forma de adentrarse y entender el comportamiento de las funciones. Recordemos que las dos palabras importantes para la el tratado de los datos dentro de una función son: **Los parámetros**, que son los valores que recibe la función y los **argumentos** que son los valores que se envían en el llamado de la función. Aquí desglosaremos los tipos de argumentos que nos permitirá tener un mejor control de la transferencia de datos a la función y para comprender mejor el tema **args** que se abordará también en esta publicación.
Argumentos Posicionales

Como su nombre lo indica los valores enviados y recibidos están relacionados por su posición. Es decir el orden de los argumentos serán recibidos en el mismo orden de la declaración de parámetros dentro de la función. En el siguiente ejemplo se detalla mejor con los colores amarillos y verdes de la líneas.

![06_01.png](Image from post)
Los ejemplos publicados son ilustrativos, donde solo visualizo la variable que se transfiere a la función. Es de entender que existen funciones más complejas que modifican la función de acuerdo a todas las operaciones que se realicen dentro de ella. Pero para un mejor entendimiento del tema de hoy, se utilizaron funciones muy sencillas.

Aquí otro ejemplo aun más comprensible donde observamos que los números 1,2 3 que se envían a la función se relacionan posicionalmente con las variables en estricto orden: n1, n2 y n3.

![06_02.png](Image from post)

Debes tener cuidado, al enviar los datos a la función. En este caso observemos como en el llamado: atleta('Rafael',89), el dato Rafael va directo a la variable nombre y el número 89 va directo a la variable peso por el orden estricto de sus posiciones. Ahora, en el caso cuando se llama a la función: atleta(50,'Petra') el número 50 va directo a la variable nombre y el 'Petra' va directo a la variable peso. En este caso no hay congruencia, entre lo enviado y lo recibido.

![06_03.png](Image from post)
Argumentos De palabras claves

Una forma más segura y donde nos garantizará que los valores llegarán a la variable de la función de forma precisa, es utilizar las palabras claves asignándoles el valor correspondiente. En este ejercicio vemos que al enviar la variable con su valor asignado llegará al parámetro de la función de forma segura. Color con su valor 'Rojo' va directo a la variable color de la función, así lo mismo sucede con la variable forma.

![06_04.png](Image from post)
Notemos aquí que invertimos las variables en el llamado a la función, en este caso colocamos primero **forma** y luego **color** y al tener las palabras claves, su funcionamiento no da error y se ejecuta como lo esperado.
![06_05.png](Image from post)

Importante: Tanto en los argumentos posicionales como en los argumentos de palabras claves es importante que el número de argumentos enviados debe ser igual a los parámetros declarados. Si no es así dará error.

Argumentos Predeterminados.

También llamados argumentos opcionales, nos da aun más control del llamado de la función y de la misma función.

Veamos como se declara la función en este caso de argumentos predeterminados.

![06_06.png](Image from post)

En este tipo de funciones, se puede llamar sin argumentos y la función se ejecutará sin ningun problema porque la función ya posee valores predeterminados.

![06_07.png](Image from post)
Podemos llamar la función enviándole, un solo valor, y funcionará porque ya posee valores predeterminados complementarán el resultado. Importante tomar en cuanta que al enviar un solo valor la función actuará como actúa con los argumentos posicionales.
![06_08.png](Image from post)
Aquí envianmos dos argumentos (siguiendo el orden lógico) y la función se ejecuta perfectamente.
![06_09.png](Image from post)
Aquí haemos el llamado con modificando los tres valores y la función se ejucuta normalmente.
![06_10.png](Image from post)
Debemos tener cuidado al enviar los argumentos. Recordemos que Python es dinámicamente tipado, y sus variables pueden cambiar de **tipo**. En el caso: **argumento('casa´)**, **'casa´** se le asignará a la variable **flag** que está declarada booleana y cuando se imprime vemos que cambiá a **string**.
![06_11.png](Image from post)
En el siguiente código podemos apreciar mejor el comportamiento de python cuando cambiamos de tipo de variable, sin ningún problema. Personalmente yo no recomiendo el cambio de **tipo**. Aunque le da flexibilidad a Python y nosotros podemos hacer uso de este cambio de acuerdo a las necesidades de nuestro código. ~~~ >>> flag=False >>> type(flag) >>> flag='casa' >>> type(flag) ~~~ Como todo tiene solución en **python** a qui les dejo una muestra de lo que podemos hacer. ![06_12.png](Image from post)

Parámetro especial *args

Podemos hacer uso de args cuando deseamos que nuestra función sea flexible a la hora de recibir los parámetros. Cabe destacar que los valores son agrupados en una Tupla.

En este caso hacemos el llamado con 7 valores, los cuales son asignados a args.

![06_arg_1.png](Image from post)
Aquí hacemos el llamado con tres valores, y la función se ejecuta perfectamente.
![06_arg_2.png](Image from post)
También podemos agregar otra variable dentro de los parámetros de la función. En este caso colocamos la variable **a** al comienzo seguido de *args. Aquí la variable **a** toma el valor de **100** y los demás valores entran en la variable **args** en forma de Tupla.
![06_arg_3.png](Image from post)
Cuando colocamos la variable en los parámetros despues de Args, nos arroja un error.
![06_arg_4.png](Image from post)
El cual podemos solucionar con lo aprendido en los argumentos, en este caso llamando a la función con un argumento de palabra clave, es decir enviamos el argumento **x** con un valor.
![06_arg_5.png](Image from post)
Otra forma de solucionar es por medio del argumento predeterminado. Es decir declaramos en los parámetros a x con un valor predeterminado en este caso el valor **0**.
![06_arg_6.png](Image from post)
Podemos cambiar el valor de la **x** y la función se ejecuta perfectamente.
![06_arg_7.png](Image from post)
Por último podemos hacer el llamado a la función sin ningún arguemento y la función se ejecutará. ~~~ >>> def aprende_arg(*args): ... print(args) ... >>> aprende_arg() () >>> ~~~

Profundizando en python

El empaquetado y desempaquetado de tuplas nos dará una mejor visión y comprensión del tema de args.

Aquí puedes ver mi anterior publicacón dedicada a las Tuplas.

Tuplas

En el empaquetado asignamos un grupo de valores a una variable.

![06_tupla1.png](Image from post)
En el desempaquetado podemos asignarle variables independientes a cada uno de los valores de la **Tupla**..
![06_tupla2.png](Image from post)
Aquí podemos ver como después del desempaquetado podemos visualizar las variables
![06_tupla3.png](Image from post)
En este caso usando el asterisco junto a una variable (aquí *otros), podemos asignarles varios valores a dicha variable. En el desempaquetado se asigna uno, dos y tres a los valores 1, 2, y 3 respectivamente. Los valores sobrantes se le asignan a la variable **otros**.
![06_tupla4.png](Image from post)
En este caso en el desempaquetado la variable uno toma el valor de 1 que está en la primera posición y la variable cinco toma el valor de 5 que está en la última posición. Los demás valores internos se asignan a la variable **dentro**.
![06_tupla5.png](Image from post)
Aquí en el desempaquetado los primeros valores se asignan a la variable **primeros** y las variables cuatro y cinco tomarán los valores 4 y 5 respectivamente.
![06_tupla6.png](Image from post)
Se destaca que la asignación del grupo de valores usando el asterisco junto a una variable, dicha variable tiene el comportamiento de una **lista**. ---

Recurso para aprender Python

Una forma muy útil para llevar este curso o realizar tus prácticas de programación con python es instalando jupyterlab en tu computador.

En este caso se creó un carpeta llamada cuadernos, luego un entorno virtual el cual activamos.

En la siguiente captura de pantalla podemos ver el código utilizado, para esta primera parte.

![06_fun_01.png](Image from post)
Ahora procedemos a instalar jupyterlab con: **pip install jupyterlab**
![06_fun_02.png](Image from post)
Para ejecutar nuestro cuaderno de trabajo usamos: **jupyter lab**.
![06_fun_03.png](Image from post)
Aquí automáticamente se ejecuta nuestro cuaderno dentro de nuestro navegador preferido. De no ejecutarse podemos darle click las direcciones que están en el recuadro o copiamos el link y lo colocamos en nuestro navegador, y se ejecutará automáticamete. Para detener la ejecución de nuestro trabajo usaremos **Ctrl + C**.
![06_fun_04.png](Image from post)
Así aparecerá en tu navegador jupyterlab, tan solo con darle click a un nuevo **notebook** y listo
![06_fun_05.png](Image from post)
Esta es una vista general de nuestra área de trabajo.
![06_fun_06.png](Image from post)
Ya podemos hacer todos nuestros ejercicios aquí. Es muy fácil de usar y con un poco de práctica nos funcionará perfectamente para nuestro ejercicios. Es una buena forma de guardar nuestras actividades con python.
![06_fun_07.png](Image from post)

Para los Usuario Windows

Es muy parecido la instalación, solo difiere en la activación del entorno virtual.

![06_fun_08.png](Image from post)
Luego ejecutamos ~~~ (env) C:\Users\siraq\python_intermedio\cuadernos>jupyter lab ~~~
![06_fun_09.png](Image from post)

Mis cursos de programación:

Curso Gratis de Programación Curso de Programación Básica


Mi Twitter

Comments (1)

stemsocial's avatar @stemsocial 9/8/2023

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

You may also include @stemsocial as a beneficiary of the rewards of this post to get a stronger support.