Добавление элементов в список * args и дальнейшая передача результата - PullRequest
0 голосов
/ 30 сентября 2019

Мне бы хотелось, чтобы в моем коде была следующая конструкция:

def target_function(*args, key=value, key2=value2, key3=value3, key4=value4):
    print(*args)

def function_prepending_arguments(*args, key4=value4):
    target_function(["a", "b", "c"] + *args, key4=key4)  # does not work, *args is a tuple

Для function_prepending_arguments(["c", "d", "e"], key4="dummy") Я ожидаю увидеть ['a', 'b', 'c', 'd', 'e'] в своем выводе.

Как мне добитьсяэто (самым питонным образом, если это возможно)?

Ответы [ 3 ]

3 голосов
/ 30 сентября 2019

Проблема в том, что вы не можете объединить список и кортеж. Итак, просто передайте ('a', 'b', 'c') + args. Или ['a', 'b', 'c'] + list(args)

0 голосов
/ 30 сентября 2019

Лучше было бы

x = [1,2,3]
# y = tuple/generator/list
y = (4,5,6)
x.extend(y) # won't return anything.
0 голосов
/ 30 сентября 2019

Для меня сработало

def function_prepending_arguments(*args, key=value):
    target_function(['a', 'b', 'c'] + list(*args), key=key)

Спасибо blue_note за то, что подтолкнули меня в правильном направлении!

...