こんにちわ!この記事はPythonの初学者のための内容となっております。
- ラムダ式わけわかめ!
- 複雑なラムダ式が分からない!
- そもそもなんだそれ!
という方向けの内容です。
また、前回は、
今回の内容とはあまり関係のないものですが、組み込み関数もラムダ式で扱えるので要確認です!
それでは頑張っていこう!
コンテンツ
プログラミングスクールに関しては下の記事で詳しく記述しています。
こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。
関数と無名関数
「def」を用いた関数
一般的な「def」を用いた関数は何度も記述しているので大丈夫だと思います。
1 2 3 4 5 6 |
def calc(x, y): return x + y print(calc(3, 5)) #8 |
「lambda」を用いた無名関数
1 2 3 4 5 |
calc = lambda x, y : x + y print(calc(3, 5)) #8 |
この場合、ラムダ式で記述することによって、1行でかけるのがメリットです。
ただし、処理が複雑で、コードが長い場合では、ラムダ式を使えない場合があります。
使い分けについて
Pythonは、コードを短く記述できるメリットがあるので、ラムダ式を利用するメリットはあまりないのですが、ほかの言語では、ラムダ式の記述が前提となっているAPIも存在するので理解する必要はあります。
しかし、組み込み関数と組み合わせた時に便利に扱えるのでその具体的な使い方を見ていきましょう!
様々なラムダ式
条件式とラムダ式
1 2 3 4 5 6 7 8 |
is_even = lambda x : x % 2 == 0 print(is_even(10)) # True print(is_even(11)) # False |
今回の例の場合、偶数か奇数かを判定するためだけに関数を定義するのは面倒です。それが、ラムダ式を用いることでとてもすっきりして見えます!
1 2 3 4 5 6 7 8 |
even_or_odd = lambda x : "even" if x % 2 == 0 else "odd" print(even_or_odd(0)) # even print(even_or_odd(1)) # odd |
このような記述方法は、内包表記でもやりました。
条件を満たしていた場合、前半部分が実行され、そうでなければ、後半を実行します。今回の偶数か奇数の判定において、「0」は当然偶数なので「even」が出力されていますね。
組み込み関数とラムダ式
ラムダ式を用いる際に便利なのが、「map」関数です。
1 2 3 4 |
x = list(map(lambda x : x * x, range(5))) print(x) # [0, 1, 4, 9, 16] |
「map」関数の第1引数では、「int」(整数型)や「abs」(絶対値)、「bin」(記号付き2進数表記)、「len」(文字列の長さ)など、様々なイテレータを渡します。第2引数では、「for」文で扱えるデータを渡します。
この例では、「lambda」をイテレータとし、リスト[0, 1, 2, 3, 4]の各要素を2乗した結果を返しています。
「map」関数のほかの使い方も紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
List = [123, -53, 1, -1000] Map = map(int, List) print(Map) # <map object at 0x7fa492f78c10> print(list(Map)) # [123, -53, 1, -1000] Map = map(abs, List) print(Map) # <map object at 0x7fa492f60c90> print(list(Map)) # [123, 53, 1, 1000] Map = map(bin, List) print(Map) # <map object at 0x7fa492f60690> print(list(Map)) # ['0b1111011', '-0b110101', '0b1', '-0b1111101000'] |
「map」関数は、オブジェクトを返すので、そのまま出力してもアドレス番号のよくわからない文字列が出力されます。これを「list」関数を用いることで、期待する結果が得られます。
まとめ
今回は、無名関数と呼ばれる、「ラムダ式」についての記述でした。
初めて見ると「なんだこれ!?」って感じでしょうが、慣れれば大丈夫だと思います。
1 2 |
lambda 引数 : 式 |
これが基本です。
条件式や、ほかの組み込み関数と組み合わせることで、1行で簡易的な関数を作成できるので、使いこなせるとワンランク上がりますね!
本日の理解度調査
今日の最後に理解度調査をします!!
どうすれば正しくなるのか考えてみてね!!
Q. ラムダ式による処理と同じになるように関数「def_2」を作成せよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
l = [1, 6, 3, 9, 5, 8, 2, 4] def_1 = list(map(lambda x : "Yes" if x >= 5 else "No", l)) def def_2(): temp = [] for i in l: if ??? #ここはどうなるかな? temp.append("Yes") else: temp.append("No") return temp print(def_1) # ['No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'No', 'No'] print(def_2()) # ['No', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'No', 'No'] |
正解は。。。
1 |
if i >= 5: |
簡単だったかな??正解出来たら今回の項目は完璧だね!!
最後まで記事を読んでいただきありがとうございます!
昔、自分が参考にしていたプログラミングについての書籍を紹介します。
非常にわかりやすい内容で、言語は「Java」ですが参考にしてみてください!
「Python」じゃないんかい!
プログラミングスクールに関しては下の記事で詳しく記述しています。
こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。