Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What is going on with this article?
@h_matsuno1028

Python 2 と 3 での高階関数の使い方の比較

More than 5 years have passed since last update.

Python を使うたびに,高階関数 (map,filter,reduce) の使い方を調べたりしているので,メモとして残しておきます.

また,最近 Python 3 の勉強を始めたのですが,Python 2 と 3 では書き方が多少異なるため,比較のために両方書いておきます.

そもそも高階関数が何かというと,関数を引数として受け取る関数のこと.
例えば,配列の各要素に対して,何らかの処理をしたいときなどに使うもの.

実行環境

  • Mac OS X Yosemite 10.10.2
  • Python 2.7.6
  • Python 3.5.1

map 関数

配列の全ての要素に対して処理をしたいときに使う.
以下の例では,配列の全ての要素を 2 倍して出力する.

  • Python 2
print map(lambda x: x * 2, range(1, 5))
  • Python 3
print (list(map(lambda x: x * 2, range(1, 5))))
  • 実行結果
[2, 4, 6, 8]

filter 関数

配列の中で条件にマッチした要素にのみ処理をしたいときに使う.
以下の例では,配列の要素から偶数のみを抽出する.

  • Python 2
print filter(lambda x: x % 2 == 0, range(1, 5))
  • Python 3
print (list(filter(lambda x: x % 2 == 0, range(1, 5))))
  • 実行結果
[2, 4]

reduce 関数

複数の要素を 1 つにまとめたいときに使う.
具体的には,配列の先頭から 2 つの要素を取り出して処理を行い,次はその結果とその次の要素に処理を行う,ということを繰り返す.

しかし,Python 3 では reduce 関数は Python のコア関数からはずされており,functools モジュールをインポートしないと使えなくなっている.

以下の例では,配列の全ての要素の合計を出す.

  • Python 2
print reduce(lambda x, y: x + y, range(1, 5))
  • Python 3
import functools

print (functools.reduce(lambda x, y: x + y, range(1, 5)))
  • 実行結果
10

Python 3 に慣れていないせいもあるが,Python 2 の方がシンプルに書けて良い,というのが個人的な感想…

参考資料

46
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
h_matsuno1028
前職は大手SIerでインフラエンジニアとして働き,今は電機メーカーでソフトウェアエンジニアとしてクラウドに携わる仕事をしています.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
46
Help us understand the problem. What is going on with this article?