189 lines
3.8 KiB
Markdown
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)
|
|
```
|
|
|