Python создавался с прицелом на активное и эффективное использование встроенных коллекций. Поэтому при выборе подхода к решению задач Python склоняет программиста к определенному стилю работы. Сам язык подталкивает использовать императивный стиль в сочетании с процедурным и объектно-ориентированным программированием.
Те же коллекции в Python являются объектами и чаще всего модифицируются по месту — отсюда изменяемое состояние. Однако в языке нашлось место и для элементов функционального программирования. Его часто считают подвидом декларативного программирования, потому что функциональный код выглядит как конвейер для преобразования данных.
В этом уроке мы рассмотрим императивный и функциональный код на Python. В обоих случаях мы попробуем вывести на экран отсортированный список уникальных элементов из некоторого набора чисел.
Процедурное решение
В процедурном решении программа разбита на подпрограммы, изменяющие состояние вместо возврата значения. Код будет выглядеть так:
INPUT = [1, 2, 5, 12, 3, 5, 2, 7, 12]
def main():
numbers = INPUT[:]
filter_and_sort(numbers) # Сортируем и фильтруем по месту
for number in numbers:
print(number) # Выводим поэлементно в цикле
def filter_and_sort(values):
values.sort() # Список сортируется по месту
previous_value = None
index = 0
while index < len(values):
value = values[index]
if value == previous_value and index > 0:
# Элемент удаляется из списка, то есть список опять модифицируется
values.pop(index)
else:
index += 1
previous_value = value