Apuntes_Python/02_conceptos/18_function_arguments/README.md
2022-12-24 22:41:20 -03:00

189 lines
3.8 KiB
Markdown

# Argumentos de funciones
**Parametros** :
son las variables definidas o usadas entre parentesis al momento de definir una función.
**Argumentos** :
son los valores pasados para estos parametros cuando se llama una función.
- Argumentos posicionales y palabras clave (positionals & keyword args)
- Argumentos por defecto
- Argumentos de largo variable (\*args y \*\*kwargs)
- Desmepaquetamiento de contenedor en argumentos de función
- Argumentos locales y globales
- Parametro 'de paso' o 'pasajero'
Ejemplos:
- [Argumentos de funciones](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/18_function_arguments#tipos-de-argumentos-de-funciones)
- [Desempaquetando argumentos](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/18_function_arguments#desempaquetando-argumentos)
- [Variables globales y locales](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/18_function_arguments#variables-globales-y-locales)
- [Paso de parametros](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/18_function_arguments#paso-de-parametros)
----
## Tipos de Argumentos de funciones
- argumento posicional
- multiples argumentos
- argumento par clave-valor (keyword)
#### Argumento básico
```python
def print_nombre(nombre):
print(nombre)
print_nombre('Juen')
# Juen
```
#### Argumentos posicionales
```python
def foo(a, b, c):
print(a, b, c)
foo(1,2,3)
# 1 2 3
foo(c=1, b=2, a=3)
# 3 2 1
foo(1, b=2, c=3)
# 1 2 3
# foo(1, b=2, 3)
# SyntaxError:
# positional argument follows keyword argument
def boo(a, b, c, d=4):
print(a, b, c, d)
boo(1, 2, 3, 7)
# 1 2 3 7
boo(1,3,5, d=6)
# 1 3 5 6
boo(5, 4, 2)
# 5 4 3 4
def koo(a, b, *args, **kwargs):
# posicional
print('argumentos:')
print(a, b)
# multiples
print('*args:')
for arg in args:
print(arg)
# par clave=valor
print('*kwargs:')
for key in kwargs:
print(key, kwargs[key])
koo(1, 2, 3, 4, 5, seis=6, siete=7)
# argumentos:
# 1 2
# *args:
# 3
# 4
# 5
# *kwargs:
# seis 6
# siete 7
# Forzar el uso de argumento 'keyword' en funciones
# los argumentos que siguen del '*' deben ser 'keyword'
def loo(a, b , *, c, d):
print(a, b, c, d)
loo(1, 2, c=3, d=4)
# 1 2 3 4
def loo(*args, ultimo):
for arg in args:
print(arg)
print(ultimo)
loo(1, 2, ultimo=16)
# 1
# 2
# 16
```
#### Desempaquetando argumentos
```python
def foo(a, b, c,):
print(a, b, c)
mi_lista = [0, 1, 2]
#mi_lista = (0, 1, 2)
# desempaquetar lista, tupla en el llamado a la función
foo(*mi_lista)
# 0 1 2
mi_dic = {'a':1, 'b':2, 'c':3}
foo(**mi_dic)
# 1 2 3
```
## Variables globales y locales
```python
def foo():
global numero
x = numero
print('numero dentro de la función :', x)
# cambio en variable global dentro de función
numero = 3
def boo():
# variable local
numero = 6
print('numero dentro de la función :', numero)
#global numero
numero = 5
foo()
print("numero fuera:",numero)
boo()
print("numero fuera:",numero)
```
## Paso de Parametros
Los parametros pasados son una referencia a un Objeto, esta referencia es pasada como valor.
Existen diferencias entre tipos de dato mutables e inmutables, es decir, objetos como
listas o diccionarios pueden ser modificados en un metodo, pero si se reasigna la referencia
en el metodo, entonces la referencia fuera de este sigue apuntando al objeto original
(no cambia).
- Objetos mutables pueden cambiar
- Objetos inmutables no pueden cambiar
- Objetos mutables dentro de objetos inmutables pueden cambiar
```python
def foo(x):
x = 5
# inmutable
var = 10
foo(var)
print(var)
def boo(una_lista):
una_lista.append(5)
# mutable
lista = [1,2,4]
boo(lista)
print(lista)
```