Saltar al contenido

Llamar a una función con lista de argumentos en Python

Solución:

Para ampliar un poco las otras respuestas:

En la linea:

def wrapper(func, *args):

El * al lado de args significa “tomar el resto de los parámetros dados y ponerlos en una lista llamada args“.

En la linea:

    func(*args)

El * al lado de args aquí significa “tomar esta lista llamada args y ‘desenvolverla’ en el resto de los parámetros.

Entonces puedes hacer lo siguiente:

def wrapper1(func, *args): # with star
    func(*args)

def wrapper2(func, args): # without star
    func(*args)

def func2(x, y, z):
    print x+y+z

wrapper1(func2, 1, 2, 3)
wrapper2(func2, [1, 2, 3])

En wrapper2, la lista se pasa explícitamente, pero en ambos contenedores args contiene la lista [1,2,3].

La forma más sencilla de ajustar una función

    func(*args, **kwargs)

… es escribir manualmente un contenedor que llamaría func () dentro de sí mismo:

    def wrapper(*args, **kwargs):
        # do something before
        try:
            return func(*a, **kwargs)
        finally:
            # do something after

En Python, la función es un objeto, por lo que puede pasar su nombre como argumento de otra función y devolverlo. También puede escribir un generador de envoltura para cualquier función anyFunc ():

    def wrapperGenerator(anyFunc, *args, **kwargs):
        def wrapper(*args, **kwargs):
            try:
                # do something before
                return anyFunc(*args, **kwargs)
            finally:
                #do something after
        return wrapper

Tenga en cuenta también que en Python cuando no sabe o no quiere nombrar todos los argumentos de una función, puede hacer referencia a una tupla de argumentos, que se indica por su nombre, precedido por un asterisco entre paréntesis después de el nombre de la función:

    *args

Por ejemplo, puede definir una función que acepte cualquier número de argumentos:

    def testFunc(*args):
        print args    # prints the tuple of arguments

Python proporciona una manipulación aún mayor de los argumentos de las funciones. Puede permitir que una función tome argumentos de palabras clave. Dentro del cuerpo de la función, los argumentos de la palabra clave se guardan en un diccionario. En el paréntesis después del nombre de la función, este diccionario se indica con dos asteriscos seguidos del nombre del diccionario:

    **kwargs

Un ejemplo similar que imprime el diccionario de argumentos de palabras clave:

    def testFunc(**kwargs):
        print kwargs    # prints the dictionary of keyword arguments

Puede usar la sintaxis * args y ** kwargs para argumentos de longitud variable.

¿Qué significan * args y ** kwargs?

Y del tutorial oficial de Python

http://docs.python.org/dev/tutorial/controlflow.html#more-on-defining-functions

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *