[python] Расширение кортежей в аргументах


1 Answers

Обратите внимание, что вы также можете развернуть часть списка аргументов:

myfun(1, *("foo", "bar"))
Question

Есть ли способ развернуть кортеж Python в функцию - как фактические параметры?

Например, здесь expand() делает магию:

tuple = (1, "foo", "bar")

def myfun(number, str1, str2):
    return (number * 2, str1 + str2, str2 + str1)

myfun(expand(tuple)) # (2, "foobar", "barfoo")

Я знаю, что можно определить myfun как myfun((a, b, c)) , но, конечно, может существовать устаревший код. благодаря




Это метод функционального программирования. Он поднимает функцию расширения кортежа из синтаксиса сахара:

apply_tuple = lambda f, t: f(*t)

Пример использования:

from toolz import * 
from operator import add, eq

apply_tuple = curry(apply_tuple)

thread_last(
    [(1,2), (3,4)],
    (map, apply_tuple(add)),
    list,
    (eq, [3, 7])
)
# Prints 'True'

curry apply_tuple экономит много partial вызовов в долгосрочной перспективе.






Related