Расширение кортежей в аргументы

Существует ли способ развернуть кортеж 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)), но конечно может быть унаследованный код.Спасибо

373
задан AkiRoss 2 November 2019 в 05:17
поделиться

2 ответа

myfun (* tuple) выполняет в точности то, что вы запрашиваете. Оператор * просто распаковывает кортеж (или любой итерируемый) и передает их в качестве позиционных аргументов функции. Подробнее см. Здесь .

Дополнительная проблема: не используйте в качестве идентификаторов имена встроенных типов, такие как кортеж , список , файл , ] set и так далее - это ужасная практика, и она вернется и укусит вас, когда вы меньше всего этого ожидаете, так что просто возьмите в привычку активно избегать сокрытия встроенных имен с вашими собственными идентификаторами.

688
ответ дан 23 November 2019 в 00:01
поделиться

Посмотрите Учебное пособие на Python Раздел 4.7.3 и 4.7.4. Он говорит о передаче кортежей в качестве аргументов.

Я также хотел бы рассмотреть возможность использования именованных параметров (и передача словаря) вместо использования кортеж и передача последовательности. Я нахожу использование позиционных аргументов, чтобы быть плохим практикой, когда позиции не интуитивно понятные, или есть несколько параметров.

14
ответ дан 23 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: