Для того, чтобы сделать использование функций ещё удобнее, в Python есть оператор * — распаковка. Его можно применять только применительно к параметрам вызываемой функции. При этом происходит следующее: из объекта, к которому применяется распаковка, извлекаются отдельные элементы и передаются в качестве отдельных параметров: Рассмотрим пример:
def func1():
    return 2, 5, 7
 
def func2(x, y, z):
    print(x + y + z)
 
func2(*func1())
Здесь функция func1() возвращает кортеж из трёх чисел, а функция func2() принимает на вход три элемента. Результат работы первой функции можно передать сразу во вторую, если распаковать результат её работы.

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

def func1(x, y):
    print(x + y)
 
def func2(x, y):
    print((x ** 2 + y ** 2) ** 0.5)
 
pars = (3, 7)
func1(*pars)
func2(*pars)

Очень удобно использовать распаковку — внутри функции print:

def fibonacci(n):
    fib1, fib2 = 0, 1
    for i in range(n):
        fib1, fib2 = fib2, fib1 + fib2
        yield fib1
print(*fibonacci(10))
Таким образом, можно быстро выводить содержимое списков, результаты работы генераторов или функций, возвращающих кортежи или списки.

Также при помощи распаковки можно передавать числовые параметры из стандартного ввода в функцию в одну строчку:

def max(a, b, c):
    return max(max(a, b), c)
print(max(*map(int, input().split())))
Последнее изменение: Суббота, 15 Август 2020, 02:35