Функциональный и императивный код программирования 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

это не настоящее функциональное программирование, но оно предлагает другой способ думать о решении проблемы, и я думаю, что ваш учитель пытается добраться до этого.