Существует ли способ развернуть кортеж 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))
, но конечно может быть унаследованный код.Спасибо
myfun (* tuple)
выполняет в точности то, что вы запрашиваете. Оператор *
просто распаковывает кортеж (или любой итерируемый) и передает их в качестве позиционных аргументов функции. Подробнее см. Здесь .
Дополнительная проблема: не используйте в качестве идентификаторов имена встроенных типов, такие как кортеж
, список
, файл
, ] set
и так далее - это ужасная практика, и она вернется и укусит вас, когда вы меньше всего этого ожидаете,
так что просто возьмите в привычку активно избегать сокрытия встроенных имен с вашими собственными идентификаторами.
Посмотрите Учебное пособие на Python Раздел 4.7.3 и 4.7.4. Он говорит о передаче кортежей в качестве аргументов.
Я также хотел бы рассмотреть возможность использования именованных параметров (и передача словаря) вместо использования кортеж и передача последовательности. Я нахожу использование позиционных аргументов, чтобы быть плохим практикой, когда позиции не интуитивно понятные, или есть несколько параметров.