Функции. Продолжение

Распаковка и упаковка аргументов; параметры по умолчанию; функции как объекты первого класса; рекурсия

Распаковка и упаковка аргументов

  • Функции могут принимать неопределенное количество аргументов.

  • Для того, чтобы функция приняла и обработала все переданные позиционные аргументы, используется синтаксис *args:

def sum_all(*args):
    count = 0
    for n in args: # args это кортеж из переданных аргументов
        count += n
    return count

Практика: напишите функцию, которая перемножает все переданные ей аргументы

  • Это была упаковка аргументов. А так выглядит распаковка:

def greet(name, age):
    print(f"Привет, {name}! Тебе {age} лет.")

person_info = ('Анна', 25) # это тип данных кортеж, содержит 2 элемента
greet(*person_info)  # Распаковываем кортеж и передаем его как два аргумента
  • Вы увидели использование кортежей — это тип данных: неизменяемая последовательность. Поддерживает индексацию, срезы и большинство методов, используемых для других последовательностей.

Параметры по умолчанию

  • Параметры по умолчанию позволяют задать значения по умолчанию для аргументов функции. Если аргумент не передан при вызове функции, то будет использовано значение по умолчанию.

Пример:

В этом примере age=30 устанавливает значение по умолчанию для аргумента age. Если age не передан при вызове, то будет использоваться 30.

Практика: определите функцию squaring (возведение в квадрат), которая имеет два параметра — число num и степень degree, которая по умолчанию равна 2.

Функции как объекты первого класса

  • В Python функции являются объектами первого класса. Это означает, что их можно передавать в качестве аргументов другим функциям, возвращать как значения других функций и хранить в переменных или структурах данных как любой другой объект.

  • Рассмотрим другой пример с передачей функции в качестве аргумента другой функции:

Практика:

  • Создайте функцию filter_numbers(numbers, filter_func), которая принимает список чисел numbers и функцию filter_func. Функция filter_numbers должна вернуть новый список, содержащий только те числа из исходного списка, для которых filter_func возвращает True

  • Пример использования:

Рекурсия

  • Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.

  • "Чтобы понять рекурсию, надо понять рекурсию"

Рекурсивное изображение экрана
  • Рекурсия в программировании — это вызов функции из неё самой

  • Принцип рекурсии — при каждом вызове подзадача должна становиться проще задачи. Важно предусмотреть крайний случай — до которого мы будем углубляться

  • Посмотрите на примеры функций. Попробуйте запустить код, проанализируйте результат

Практика:

  • Напишите функцию, которая принимает число и возвращает его факториал

  • Напишите рекурсивную функцию нахождения числа Фибоначчи. Функция принимает порядковый номер числа Фибоначчи и возвращает его значение. Дополнительно: реализуйте задачу при помощи итеративной функции

Last updated