Apuntes_Python/02_conceptos/18_function_arguments
2024-01-16 12:23:41 -03:00
..
a_funciones.py init Apuntes Python 2022-12-24 22:41:20 -03:00
b_local_global_var.py init Apuntes Python 2022-12-24 22:41:20 -03:00
c_paso_de_params.py init Apuntes Python 2022-12-24 22:41:20 -03:00
README.md ed: domain links on files <kickto.net >letz.dev 2024-01-16 12:23:41 -03:00

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:


Tipos de Argumentos de funciones

  • argumento posicional
  • multiples argumentos
  • argumento par clave-valor (keyword)

Argumento básico

def print_nombre(nombre):
    print(nombre)

print_nombre('Juen')
# Juen

Argumentos posicionales

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

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

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
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)