Функциональный и императивный код программирования Python
Итак, в настоящее время я нахожусь в классе, изучающем 3 основные парадигмы программирования. Я знаю, что python использует как функциональную, так и императивную парадигмы. Я искал короткий пример кода на python каждой из этих парадигм, чтобы лучше понять это до моего завтрашнего экзамена. Спасибо!
3 ответов
дано L = [1, 2, 3, 4, 5]
мы можем вычислить сумму двумя способами.
важно:
sum = 0
for x in L:
sum += x
функциональные (локальная функция):
def add(x, y):
return x + y
sum = reduce(add, L)
функциональные (лямбда-выражения):
sum = reduce(lambda x, y: x + y, L)
(конечно, встроенный sum
функция будет эффективно делать то же самое, что и любой из них.)
один из способов понять разницу между императивной и функциональной парадигмами заключается в том, что с императивом вы должны явно кодировать порядок ваших операций (я использую очень свободный язык, чтобы сделать его простым для вас). В отличие от функционального программирования, вы не определяете последовательность, а объявляете то, что пытаетесь смоделировать (поэтому его иногда называют декларативным стилем программирования).
Так, в приведенном ниже примере, если я хочу чтобы определить, какие числа даже в списке, я должен явно закодировать цикл и проверить, является ли каждое число четным или нет при кодировании императивно. Мне не нужно было делать это в функциональном примере. В этом примере я просто определил, что означает, что число должно быть четным, а затем я просто применил эту абстракцию/функцию к списку. Простой лайнер.
есть больше различия между двумя парадигмами, но это должно дать вам идея.
важно:
naturalNumbers = [0,1,2,3,4,5,6,7,8,9]
def printEvenNumbers (listOfNumbers):
for x in listOfNumbers:
if x % 2 == 0:
print True
else:
print False
функционал:
def evenNumber (x):
return (x % 2) == 0
print(map(evenNumber, naturalNumbers))
вы можете изменить словарь двумя способами:
def reverse_mapping1(map):
return {v:k for k, v in map.items()}
def reverse_mapping2(map):
inverse = {}
for k, v in map.iteritems():
inverse[v] = inverse.get(v, [])
inverse[v].append(k)
return inverse
это не настоящее функциональное программирование, но оно предлагает другой способ думать о решении проблемы, и я думаю, что ваш учитель пытается добраться до этого.