pythonでの関数式プログラミング
2387 ワード
正直、関数式プログラミングは触れたことがなく、何度も聞いたことがあります.だからpythonのコンセプトから接触しましょう! if文の置換: 1
if
<
cond1
>
:
2
func1()
3
elif
<
cond2
>
:
4
func2()
5
else
:
6
func3()
上は元の条件判断文で、異なる条件に対して異なる操作をします.関数式で書くと次のようになります.
1
(
<
cond1
>
and
func1())
or
(
<
cond2
>
and
func2())
or
func3() lambda式の使用 Lambdaの概念はもともとC#で接触したことがありますが、私の理解では匿名関数です.pythonのヘルプでは、An anonymous inline function consisting of a single expression which is evaluated when the function is calledと定義されています.The syntax to create a lambda function is lambda [arguments]: expression .Lambdaは主にいくつかの小さな関数を書くために使われています.たとえば
1
def
lowercase(x):
2
return
x.lower()
3
書ける
1
lowercase
=
lambda
x: x.lower()
1
def
adder(x,y):
2
return
x
+
y
3
書ける
1
adder
=
lambda
x,y:x
+
yでよく使用されるmap()、
1
a
=
"
abcdefg
"
2
map(
lambda
x:ord(x),a)
その結果は,[97,98,99,100,101,102,103]であった.
1
filter(
lambda
x:ord(x)
%
2
==
0 ,a)
結果は「bdf」関数ループ 標準的なfor item in containerはmap関数で行うことができます.一連の関数呼び出しを行う場合は、func 1を呼び出し、func 2、func 3を呼び出し、mapで実現するプロセスは以下の通りです.
1
tmpFunc
=
lambda
x: x()
2
map(tmpFunc,[func1,func2,func3])
これにより一連の関数の連続呼び出しを実現できるが,パラメータをどのように伝達するかは引き続き検討する必要がある.
whileループはif文の関数式を用いてシミュレーションを行うことができる.
----------------------------------------------------------------------------------
最後に、関数プログラミングの利点:ほとんどのプログラムエラー--およびプログラマにデバッグを求めて解決を促す問題--プログラム実行中に変数に予期せぬ値が含まれているため、発生します.関数プログラムは、変数に値を割り当てるだけでなく、この特別な問題を回避します.
if
<
cond1
>
:
2
func1()
3
elif
<
cond2
>
:
4
func2()
5
else
:
6
func3()
上は元の条件判断文で、異なる条件に対して異なる操作をします.関数式で書くと次のようになります.
1
(
<
cond1
>
and
func1())
or
(
<
cond2
>
and
func2())
or
func3()
1
def
lowercase(x):
2
return
x.lower()
3
書ける
1
lowercase
=
lambda
x: x.lower()
1
def
adder(x,y):
2
return
x
+
y
3
書ける
1
adder
=
lambda
x,y:x
+
y
reduce
()およびfilter
()map()
は、指定されたリスト内の対応する各項目に対して伝達された関数を実行し、結果リストを返す.相当于:for item in container:func(item)1
a
=
"
abcdefg
"
2
map(
lambda
x:ord(x),a)
その結果は,[97,98,99,100,101,102,103]であった.
reduce()
は、後続の各項目に対して伝達された関数を実行し、最終結果の内部累積を返す.例えば、reduce(lambda n,m:n*m, range(1,10))
は「10の階乗」を意味する(換言すれば、前の乗算の積を1項ごとに乗じる)filter()
は、伝達された関数を使用してリスト内の各項目を評価し、その後、伝達関数テストに合格した項目のリストを返します.mapの例に基づいて、次のコードを実行します.1
filter(
lambda
x:ord(x)
%
2
==
0 ,a)
結果は「bdf」
1
tmpFunc
=
lambda
x: x()
2
map(tmpFunc,[func1,func2,func3])
これにより一連の関数の連続呼び出しを実現できるが,パラメータをどのように伝達するかは引き続き検討する必要がある.
whileループはif文の関数式を用いてシミュレーションを行うことができる.
----------------------------------------------------------------------------------
最後に、関数プログラミングの利点:ほとんどのプログラムエラー--およびプログラマにデバッグを求めて解決を促す問題--プログラム実行中に変数に予期せぬ値が含まれているため、発生します.関数プログラムは、変数に値を割り当てるだけでなく、この特別な問題を回避します.