Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Лямбда функция - важный элемент функционального программирования, поэтому мы будем рассматривать не только её, но и
- # остальные принципы.
- # Функциональное программирование подразумевает, что вы будете последовательно разбивать свой код на различные функции
- # и последовательно вызывать их
- # 1. Lambda функция (альтернативное название "Анонимная функция").
- # Главное преимущество lambda функций в том, что их можно встраивать напрямую в аргументы других функций, что даёт вам
- # более лаконичную запись и более оптимизированный код, ведь если вы функцию вызываете 1 раз, зачем её хранить до конца
- # программы?
- #
- # 1.1. Лямбда функция - конструкция вида:
- # lambda var: var*2, где:
- # var - это аргументы функции, а
- # var*2 - это возвращаемый объект.
- # Пример 1.1:
- my_func = lambda var: var + 1
- print(my_func(1)) # 2
- # Тут мы анонимную функцию присваиваем к переменной, но в таком случае лучше использовать аналогичная запись
- # через обычную функцию:
- def my_func(var):
- return var+1
- print(my_func(1)) # 2
- # Пример 1.2:
- print((lambda var: var * 2)(1))
- # Этот код не имеет практического применения, ведь можно написать просто 1*2, но для общего понимания работы lambda
- # функции он неплохо подходит.
- # 2. Основные функции функционального программирования:
- # 2.1. Итерируемый объект - объект, который хранит в себе элементы и их можно получать по одному.
- # Примеры итерируемых объектов:
- # [0, 1, 2] (list) - 0, 1 и 2 являются элементами;
- # {"0":None,
- # "1":None,
- # "2":None} (dict) - Ключи словаря - элементы, получаемым во время итерирования ("0", "1" и "2");
- # "012" - (str) - "0", "1", "2" являются элементами.
- # 2.2. map - функция, которая позволяет применять определённую функцию к каждому элементу в итерируемом объекте
- # и возвращает итератор "map object", поэтому чтобы адекватно посмотреть на результат стоит применить функцию list.
- # Применять list стоит только в случаях, когда надо именно посмотреть. (это замедляет программу)
- # map(function, iterable), где:
- # function - функция, а
- # iterable - итерируемый объект.
- # Пример 2.1:
- iterable = [1.1, 2.2, 3.3]
- print(list(
- map(int, iterable)
- )) # [1, 2, 3]
- # Этим примером мы все float значения поменяли на int.
- # Аналогичная запись:
- iterable = [1.1, 2.2, 3.3]
- for i in range(len(iterable)):
- iterable[i] = int(iterable[i])
- print(iterable) # [1, 2, 3]
- # Пример 2.2:
- iterable = ["1.41", "2.234", "4.0"]
- print(list(
- map(float, iterable)
- )) # [1.41, 2.234, 4.0]
- # Перевод всех строк в float
- # Пример 2.2:
- iterable = ["1.41", "2.234", "4.0"]
- print(list(
- map(len, iterable)
- )) # [4, 5, 3]
- # Получение длины каждой строки в списке
- # 2.2.1 Вместо готовых функций (int, float, str, len и т. д.) можно так же использовать свои функции,
- # как обычные, так и анонимные.
- # Пример 2.3:
- iterable = [1, 2, 3]
- print(list(
- map(lambda var: var**2,
- iterable)
- )) # [1, 4, 9]
- # Получение квадратов каждого элемента из списка
- # Аналогичная запись с применением обычной функции:
- def my_func(var):
- return var**2
- print(list(
- map(my_func, iterable)
- )) # [1, 4, 9]
- # Пример 2.4
- iterable = [1.1, 2.2, 3.3]
- print(list(
- map(lambda var: round(var**2, 2),
- iterable)
- )) # [1.21, 4.84, 10.89]
- # Получение квадратов каждого элемента из списка и округление до 2х знаков после запятой
- # 2.3 filter - функция, которая фильтрует элементы по условию. Если условие False, то элемент не попадает возвращается.
- # filter(function, iterable), где:
- # function - логическая функция;
- # iterable - итерируемый объект.
- # Пример 2.5:
- iterable = ["0", "1", "2ch"]
- print(list(
- filter(lambda var: var.isdigit(),
- iterable)
- )) # ["0", "1"]
- # Получение строк, которые можно перевести в int
- # Пример 2.6:
- iterable = [0, 1, 2]
- print(list(
- filter(lambda var: var < 2,
- iterable)
- )) # [0, 1]
- # Возвращает все значения, которые < 2
- # 2.3.1. Как и любые другие функции в функциональном программировании их можно комбинировать.
- # Пример 2.7: Модифицируем пример 2.5 сделав автоматический перевод в int
- iterable = ["0", "1", "2ch"]
- print(list(
- map(int,
- filter(lambda var: var.isdigit(),
- iterable)
- )
- )) # [0, 1]
- # Теперь вместо ["0", "1"] мы получаем [0, 1]
- # 2.4. min, max и sort - функции так или иначе предназначенные для сортировки.
- # min(iterable, key=None),
- # max(iterable, key=None),
- # sorted(iterable, key=None, reverse=False), где:
- # iterable - Итерируемый объект
- # key - функция, по которой итерируем.
- # reverse - переворачивание порядка (изменение шага с 1 на -1)
- # (min и max возвращают одно значение, а sorted возвращает отсортированный список)
- # Пример 2.9:
- iterable = ["Люсьена", "Антон", "Даша"]
- print(min(iterable, key=len)) # Даша
- print(max(iterable, key=len)) # Люсьена
- print(sorted(iterable, key=len)) # ['Даша', 'Антон', 'Люсьена']
- # Сортировка по длине слов
- # Пример 2.10:
- iterable = ["Люсьена", "Антон", "Даша"]
- print(sorted(
- iterable
- )) # ['Антон', 'Даша', 'Люсьена']
- # Сортировка по первым буквам
- # Пример 2.11:
- iterable = ["Люсьена", "Антон", "Даша"]
- print(sorted(
- iterable,
- key=lambda var: var[::-1] # разворачиваем каждое слово для сортировки
- )) # ['Люсьена', 'Даша', 'Антон']
- # Сортировка по последним буквам
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement