¿Hay alguna manera de expandir una tupla de Python en una función, como parámetros reales?
Por ejemplo, aquí expand()
hace la magia:
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Sé que uno podría definir myfun
como myfun((a, b, c))
, pero por supuesto puede haber código heredado. Gracias
python
tuples
parameter-passing
AkiRoss
fuente
fuente
Tenga en cuenta que también puede expandir parte de la lista de argumentos:
fuente
some_func(*tuple_of_stuff, another_argument)
def func(a,b,c,d): print(a,b,c,d)
conargs = ('fee', 'fi', 'fo'); func(*args, 'fum')
Eche un vistazo a la sección de tutoriales de Python 4.7.3 y 4.7.4. Habla de pasar tuplas como argumentos.
También consideraría usar parámetros con nombre (y pasar un diccionario) en lugar de usar una tupla y pasar una secuencia. Considero que el uso de argumentos posicionales es una mala práctica cuando las posiciones no son intuitivas o hay múltiples parámetros.
fuente
Este es el método de programación funcional. Levanta la función de expansión de tupla del azúcar de sintaxis:
apply_tuple = lambda f, t: f(*t)
Ejemplo de uso:
La redefinición del curry
apply_tuple
ahorra muchaspartial
llamadas a largo plazo.fuente
lambda f, t: f(*t)
no usa módulos de terceros y soy un principiante de Python y esto me ayuda. Este es un enfoque puramente funcional. Si no usa este estilo, esta respuesta no es para usted.starmap
docs.python.org/3.7/library/itertools.html#itertools.starmap