Есть ли способ расширить кортеж Python в функцию - в качестве фактических параметров?
Например, вот expand()
волшебство:
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Я знаю, что можно определить myfun
как myfun((a, b, c))
, но, конечно, может быть устаревший код. Спасибо
python
tuples
parameter-passing
AkiRoss
источник
источник
Обратите внимание, что вы также можете расширить часть списка аргументов:
источник
some_func(*tuple_of_stuff, another_argument)
def func(a,b,c,d): print(a,b,c,d)
сargs = ('fee', 'fi', 'fo'); func(*args, 'fum')
Взгляните на разделы 4.7.3 и 4.7.4 учебника по Python . Это говорит о передаче кортежей в качестве аргументов.
Я также хотел бы рассмотреть использование именованных параметров (и передачу словаря) вместо использования кортежа и передачи последовательности. Я считаю использование позиционных аргументов плохой практикой, когда позиции не интуитивны или есть несколько параметров.
источник
Это метод функционального программирования. Он поднимает функцию расширения кортежа из синтаксического сахара:
apply_tuple = lambda f, t: f(*t)
Пример использования:
Карри redefiniton из
apply_tuple
экономит многоpartial
звонков в долгосрочной перспективе.источник
lambda f, t: f(*t)
не использует сторонние модули, я новичок в Python, и это полезно для меня. Это чисто функциональный подход. Если вы не используете этот стиль, тогда этот ответ не для вас.starmap
docs.python.org/3.7/library/itertools.html#itertools.starmap