Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты ВвИТ, СиСС, Экзамен 3 сем, 2021.docx
Скачиваний:
33
Добавлен:
21.01.2022
Размер:
41.28 Кб
Скачать

7. Как использовать дефолтные аргументы функции и как их изменять? Возможные проблемы, связанные с ними.

Аргументы функции по умолчанию (дефолтные) - аргументы, значения которых заданы при объявлении функции. Их необязательно передавать при вызове функции, но при этом, если вызвать функцию с заданным значением такого аргумента, то его значение изменится на передаваемое. Одной из особенностей (проблем) таких аргументов является то, что после таких аргументов не могут идти аргументы без значения по умолчанию. То есть такие аргументы при объявлении функции должны идти строго после объявления аргументов без значения по умолчанию.

8. Что такое оператор упаковки и распаковки, их сходства и отличия? Приведите примеры использования.

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

Оператор распаковки наоборот, разделяет кортеж на переменные. обозначается * при передаче списка в функцию. Может использоваться для передачи переменных в функцию в виде списка.

9. Как в python работает области видимости (локальный и глобальный контекст, видимость функций, тело операторов)?

Если переменная является локальной, то есть объявляется внутри какой-то структуры, например цикла или функции, то мы не можем ее использовать нигде, кроме определенной части кода. Глобальные переменные наоборот, объявляются за пределами каких-либо структур и могут быть вызваны из любой части программы.

Видимость функций определяется порядком их написания. Например, если мы попытаемся вызвать функцию до ее объявления и написания, то интерпретатор вернет ошибку о несуществующей функции.

10. Что такое lambda выражение, как оно работает и из чего строится? Напишите простейшее lambda выражение и приведите примеры, где его принято применять.

lambda выражение необходимо для написания одноразовых анонимных функций, ограниченных одним выражением. Такое выражение строится по принципу:

lambda *имена переменных*: *действие над переменными*

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

f = lambda a, b: a + b

a = 2

b = 3

print(f(a, b))

У lambda выражений есть ограничения:

  • не могут содержать return, pass, assert, raise;

  • не имеют имени функции;

  • не могут иметь в теле более одной строки с выражением;

  • не поддерживают аннотации типов.

В основном lambda выражения используют со встроенными функциями zip() (объединяет в кортежи переданные функции элементы последовательностей), map() (применяет функцию к каждому элементу составного типа данных, например, списка), filter() (фильтрует переданный в функцию список по условию, заданному другой функцией)

11. Перечислите набор встроенных в python функций, взятых из функционального программирования. Как они работают (принимаемые аргументы и результат работы), где их можно применять?

Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции: lambda, map, filter, reduce, zip.

lambda выражение описано в 10 вопросе.

Функция map() принимает два аргумента: функцию и последовательность данных, например список. Она применяет переданную функцию к каждому элементу списка, после чего возвращает его.

Пример работы функции:

a = [1, 2, 3, 0.1, 1.5]

b = list(map(lambda x: x * 1.6, a))

print(b)

[1.6, 3.2, 4.8, 0.16, 2.4]

Функция filter() имеет аналогичные с map() аргументы. Она фильтрует данные в соответствии с условиями функции, возвращая отфильтрованный список. Функция должна строго возвращать True или False.

Пример работы функции:

a = ["a", "b", "b", "a", "a", "b"]

b = list(filter(lambda x: x == "a", a))

print(b)

['a', 'a', 'a']

Функция reduce() имеет аналогичные с предыдущими функциями аргументы. Она последовательно применяет переданную функцию к каждому элементу, после чего возвращает одно итоговое значение.

Пример работы функции:

from functools import reduce

a = [1, 2, 5, 3, 16, 5]

b = reduce(lambda a, b: a if (a > b) else b, a)

print(b)

16

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

Пример работы функции:

a = [1, 2, 3, 4]

b = ["q", "w", "e"]

c = [True, False, False, True]

res = list(zip(a, b, c))

print(res)

[(1, 'q', True), (2, 'w', False), (3, 'e', False)]