私は現在、3 つの主要なプログラミング パラダイムについて学ぶクラスに参加しています。私は、Python が関数型パラダイムと命令型パラダイムの両方を使用していることを知っています。明日の試験の前にこれをよりよく理解するために、これらの各パラダイムの Python での短いサンプル コードを探していました。ありがとうございました!
3 に答える
2 つの方法で合計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
関数はこれらのいずれかと同じことを効果的に行います。)
命令型パラダイムと関数型パラダイムの違いを考える 1 つの方法は、命令型では操作の順序を明示的にコーディングする必要があるということです (ここでは、簡単にするために非常に緩い言葉を使用しています)。対照的に、関数型プログラミングでは、シーケンスを定義するのではなく、モデル化しようとしているものを宣言します (これが、プログラミングの宣言型スタイルと呼ばれることがある理由です)。
したがって、以下の例では、リスト内のどの数値が偶数であるかを判断したい場合、ループを明示的にコーディングし、命令的にコーディングするときに各数値が偶数かどうかを確認する必要があります。機能的な例では、それを行う必要はありませんでした。その例では、数値が偶数であることの意味を定義し、この抽象化/関数をリストに適用しました。シンプルなワンライナー。
2 つのパラダイムにはさらに多くの違いがありますが、これでアイデアが得られるはずです。
必須:
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))
次の 2 つの方法で、辞書を逆にすることができます。
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
これは真の関数型プログラミングではありませんが、問題を解決するための別の方法を提供してくれます。これは、先生が到達しようとしているものだと思います。