Аргумент функции распаковки
если функция принимает 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( ... ))
в этом случае.
Ответы
Ответ 1
Вы ищете синтаксис аргумента *args
:
>>> def foo(bar, baz, spam):
... print bar, baz, spam
...
>>> arguments = [1, 2, 3]
>>> foo(*arguments)
1, 2, 3
При передаче аргументов вызываемому, любое выражение, предшествующее астерике *
, интерпретируется как последовательность позиционных аргументов и расширяется для передачи в качестве отдельных аргументов вызываемому объекту (функции, методу и т.д.),.
В вашем примере это будет:
func1(*func2(...))
Существует эквивалент ключевого слова с использованием **
double asterixes (принимает сопоставление), и вы также можете использовать тот же синтаксис в подписях функций.
См. документацию для выражений вызовов и для синтаксиса зеркального отображения подписи документации по определениям функций.
Ответ 2
Он вызывает распаковку аргументов и записывается как:
func1(*func2(...))
Refer: https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists