Funciones

Mas sobre parametros

Contents

Las funciones pueden o no recibir parámetros, ya dijimos que los parámetros pueden tener cualquier tipo, que pasa sí tenemos una función que podría aceptar parámetros opcionales?. Los parámetros opcionales son parámetros que tienen un valor “predefinido” en caso de que el usuario no los introduzca se usa el valor por defecto.

def registra_envio(nombre, dirección, telefono, correoe=""):
    # Realiza proceso de registro de datos
    if correoe:
        # Registra el correo electrónico
        # Envia correo de confirmación

Como podemos ver, correoe es un parámetro opcional, el cual es revisado en la función y si tiene valor entonces se usa para el registro y envío de correo de confirmación.

Aceptando un numero infinito de parametros

Algunas funciones pueden aceptar un numero “infinito” de parámetros. Aunque en realidad tendrán un numero finito porque.. vaya, el chiste es que el código sea legible, pero en Python se puede.

Para estro haremos uso de un par de operadores en parámetros, el operador * y ** .

El primero (* ) nos permite aceptar una cantidad infinita de parámetros por posición, por ejemplo:

def sum(*prods):
    result = 0
    for i in prods:
        result += i
    return result

En esta función aceptamos N numero de argumentos por posición y luego los sumamos, mandar llamar la función seria algo asi:

>>> print sum(1,2,3,4,5,6,7,8,9)
45

prods en la función ser vería así: [1,2,3,4,5,6,7,8,9]. Esto se me hace conocido… es la misma sintaxis de una lista. Entonces *prods es una lista!, por eso es que puedo iterar en la lista de parámetros (for i in prods ), esto nos permite también operar en los parámetros como lo haríamos con una lista, podemos agregar, quitar o modificar los valores.

Nota, por convención el nombre de la variable que va despues de ” * ” se denomina args

El segundo operador (** ) es técnicamente lo mismo, pero, para parámetros por nombre.

>>> def por_nombre(**items):
... print items
...
>>> por_nombre(nombre="Marco", apellido="Islas", lenguaje="Python")
{'nombre': 'Marco', 'lenguaje': 'Python', 'apellido': 'Islas'}

Como podemos ver, items es un diccionario, entonces, esto porque las variables van por nombre y nos interesa saber el nombre de cada variable. Así como con *args podemos modificarlo a gusto.

Usando ambos

Nada nos impide que en una función tengamos parámetros por posición y por nombre. Podemos tener algo asi:

def mifuncion(*args, **kwargs):

Dentro de la función trataremos a *args  y **kwargs como queramos. Ojo, hay un protocolo para llamar una función y pasar parámetros por posición y por nombre.

Loading

You must be logged in to take the quiz.