Advertisement
ToxaLay

lambda и функциональное программирование

Oct 4th, 2022
945
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.62 KB | None | 0 0
  1. # Лямбда функция - важный элемент функционального программирования, поэтому мы будем рассматривать не только её, но и
  2. # остальные принципы.
  3. # Функциональное программирование подразумевает, что вы будете последовательно разбивать свой код на различные функции
  4. # и последовательно вызывать их
  5.  
  6. # 1. Lambda функция (альтернативное название "Анонимная функция").
  7. # Главное преимущество lambda функций в том, что их можно встраивать напрямую в аргументы других функций, что даёт вам
  8. # более лаконичную запись и более оптимизированный код, ведь если вы функцию вызываете 1 раз, зачем её хранить до конца
  9. # программы?
  10. #
  11. # 1.1. Лямбда функция - конструкция вида:
  12. # lambda var: var*2, где:
  13. #   var   - это аргументы функции, а
  14. #   var*2 - это возвращаемый объект.
  15.  
  16. # Пример 1.1:
  17. my_func = lambda var: var + 1
  18. print(my_func(1))  # 2
  19. # Тут мы анонимную функцию присваиваем к переменной, но в таком случае лучше использовать аналогичная запись
  20. # через обычную функцию:
  21. def my_func(var):
  22.     return var+1
  23. print(my_func(1))  # 2
  24.  
  25. # Пример 1.2:
  26. print((lambda var: var * 2)(1))
  27. # Этот код не имеет практического применения, ведь можно написать просто 1*2, но для общего понимания работы lambda
  28. # функции он неплохо подходит.
  29.  
  30. # 2. Основные функции функционального программирования:
  31. # 2.1. Итерируемый объект - объект, который хранит в себе элементы и их можно получать по одному.
  32. # Примеры итерируемых объектов:
  33. #   [0, 1, 2]  (list) - 0, 1 и 2 являются элементами;
  34. #   {"0":None,
  35. #    "1":None,
  36. #    "2":None} (dict) - Ключи словаря - элементы, получаемым во время итерирования ("0", "1" и "2");
  37. #   "012 -      (str) - "0", "1", "2" являются элементами.
  38.  
  39. # 2.2. map - функция, которая позволяет применять определённую функцию к каждому элементу в итерируемом объекте
  40. # и возвращает итератор "map object", поэтому чтобы адекватно посмотреть на результат стоит применить функцию list.
  41. # Применять list стоит только в случаях, когда надо именно посмотреть. (это замедляет программу)
  42. # map(function, iterable), где:
  43. #   function - функция, а
  44. #   iterable - итерируемый объект.
  45.  
  46. # Пример 2.1:
  47. iterable = [1.1, 2.2, 3.3]
  48. print(list(
  49.     map(int, iterable)
  50. ))  # [1, 2, 3]
  51. # Этим примером мы все float значения поменяли на int.
  52. # Аналогичная запись:
  53. iterable = [1.1, 2.2, 3.3]
  54. for i in range(len(iterable)):
  55.     iterable[i] = int(iterable[i])
  56. print(iterable)  # [1, 2, 3]
  57.  
  58. # Пример 2.2:
  59. iterable = ["1.41", "2.234", "4.0"]
  60. print(list(
  61.     map(float, iterable)
  62. ))  # [1.41, 2.234, 4.0]
  63. # Перевод всех строк в float
  64.  
  65. # Пример 2.2:
  66. iterable = ["1.41", "2.234", "4.0"]
  67. print(list(
  68.     map(len, iterable)
  69. ))  # [4, 5, 3]
  70. # Получение длины каждой строки в списке
  71.  
  72. # 2.2.1 Вместо готовых функций (int, float, str, len и т. д.) можно так же использовать свои функции,
  73. # как обычные, так и анонимные.
  74.  
  75. # Пример 2.3:
  76. iterable = [1, 2, 3]
  77. print(list(
  78.     map(lambda var: var**2,
  79.         iterable)
  80. ))  # [1, 4, 9]
  81. # Получение квадратов каждого элемента из списка
  82. # Аналогичная запись с применением обычной функции:
  83. def my_func(var):
  84.     return var**2
  85. print(list(
  86.     map(my_func, iterable)
  87. ))  # [1, 4, 9]
  88.  
  89. # Пример 2.4
  90. iterable = [1.1, 2.2, 3.3]
  91. print(list(
  92.     map(lambda var: round(var**2, 2),
  93.         iterable)
  94. ))  # [1.21, 4.84, 10.89]
  95. # Получение квадратов каждого элемента из списка и округление до 2х знаков после запятой
  96.  
  97. # 2.3 filter - функция, которая фильтрует элементы по условию. Если условие False, то элемент не попадает возвращается.
  98. # filter(function, iterable), где:
  99. #   function - логическая функция;
  100. #   iterable - итерируемый объект.
  101.  
  102. # Пример 2.5:
  103. iterable = ["0", "1", "2ch"]
  104. print(list(
  105.     filter(lambda var: var.isdigit(),
  106.            iterable)
  107. ))  # ["0", "1"]
  108. # Получение строк, которые можно перевести в int
  109.  
  110. # Пример 2.6:
  111. iterable = [0, 1, 2]
  112. print(list(
  113.     filter(lambda var: var < 2,
  114.            iterable)
  115. ))  # [0, 1]
  116. # Возвращает все значения, которые < 2
  117.  
  118. # 2.3.1. Как и любые другие функции в функциональном программировании их можно комбинировать.
  119. # Пример 2.7: Модифицируем пример 2.5 сделав автоматический перевод в int
  120. iterable = ["0", "1", "2ch"]
  121. print(list(
  122.     map(int,
  123.         filter(lambda var: var.isdigit(),
  124.                iterable)
  125.         )
  126. ))  # [0, 1]
  127. # Теперь вместо ["0", "1"] мы получаем [0, 1]
  128.  
  129. # 2.4. min, max и sort - функции так или иначе предназначенные для сортировки.
  130. # min(iterable, key=None),
  131. # max(iterable, key=None),
  132. # sorted(iterable, key=None, reverse=False), где:
  133. #   iterable - Итерируемый объект
  134. #   key - функция, по которой итерируем.
  135. #   reverse - переворачивание порядка (изменение шага с 1 на -1)
  136. # (min и max возвращают одно значение, а sorted возвращает отсортированный список)
  137.  
  138. # Пример 2.9:
  139. iterable = ["Люсьена", "Антон", "Даша"]
  140. print(min(iterable, key=len))     # Даша
  141. print(max(iterable, key=len))     # Люсьена
  142. print(sorted(iterable, key=len))  # ['Даша', 'Антон', 'Люсьена']
  143. # Сортировка по длине слов
  144.  
  145. # Пример 2.10:
  146. iterable = ["Люсьена", "Антон", "Даша"]
  147. print(sorted(
  148.     iterable
  149. ))  # ['Антон', 'Даша', 'Люсьена']
  150. # Сортировка по первым буквам
  151.  
  152. # Пример 2.11:
  153. iterable = ["Люсьена", "Антон", "Даша"]
  154. print(sorted(
  155.     iterable,
  156.     key=lambda var: var[::-1]  # разворачиваем каждое слово для сортировки
  157. ))  # ['Люсьена', 'Даша', 'Антон']
  158. # Сортировка по последним буквам
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement