Подтвердить что ты не робот

Аргумент функции распаковки

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

т.е.)

def func1(x, y, z):
    return x+y+z

def func2(w):
    return [i for i in range(w,w+3)]

cant func1(func2( ... )) в этом случае.

4b9b3361

Ответ 1

Вы ищете синтаксис аргумента *args:

>>> def foo(bar, baz, spam):
...     print bar, baz, spam
...
>>> arguments = [1, 2, 3]
>>> foo(*arguments)
1, 2, 3

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

В вашем примере это будет:

func1(*func2(...))

Существует эквивалент ключевого слова с использованием ** double asterixes (принимает сопоставление), и вы также можете использовать тот же синтаксис в подписях функций.

См. документацию для выражений вызовов и для синтаксиса зеркального отображения подписи документации по определениям функций.