ソースコードの歩き方《IronPython》map 1/5

Previous|1/5|Next
Python.use(better, src=”IronPython”) # ソースコードを散策する記事一覧
組み込み関数 mapIronPython

《著》本間りす《監修》小泉ひよ子とタマゴ倶楽部
更新♪08/09/10


IronPythonソースコードを読みながら、Python の環境下で、その動作を確認します。なぜ IronPython の動作を Python で確認するのか、その理由は後述します。

事例:リストの内包と比べて

組み込み関数 map の典型的な利用法は、関数を任意の要素に適用することです。

>>> map(lambda e: e*2, range(10))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

ここでは、各要素を2倍した値を列挙したリストが得られます。
第1引数 function には、任意の(第2引数 sequence 以降の引数と同数の引数が必要な)関数を指定します。ここでは、lambda 関数の引数 e を使って、range(10) の各要素を参照します。
第2引数 sequence 以降には、任意のシーケンスを指定します。ここでは、関数を適用する対象として、0 から 9 までの整数を列挙したリストを与えます。
組み込み関数 map と同じことは、次のように、

>>> [e*2 for e in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

リストの内包でも表現できます。

>>> map(type, [0, "", True, None, [], {}, ()])
[, , , , , , ]

組み込み関数 type を適用すると、各要素の型が分かります。

事例:文字列を使って

第2引数 sequence に、シーケンスとして文字列を与えると、第1引数 function を各要素(文字)に適用します。

>>> map(ord, "ABC")
[65, 66, 67]

組み込み関数 ord を使うと、文字列を構成する各要素(文字)の ASCII コード値が得られます。また、組み込み関数 map でリストが得られるので、これを別の map の第2引数に指定できます。すると、

>>> map(hex, map(ord, "ABC"))
['0x41', '0x42', '0x43']

前述した ASCII コード値に、組み込み関数 hex を適用すると、16進数で表記した文字列が得られます。同じことは、次のように、

>>> [hex(ord(e)) for e in "ABC"]
['0x41', '0x42', '0x43']

リストの内包でも表現できます。

>>> map(str.lower, "ABC")
['a', 'b', 'c']

ここでは、関数の代わりに、組み込み型のメソッド str.lower を指定しています。同じことは、次のように、

>>> [e.lower() for e in "ABC"]
['a', 'b', 'c']

リストの内包でも表現できます。


Previous|1/5|Next

組み込み関数 map

次に、組み込み関数 map のヘルプ情報を確認します。

>>> help(map)
Help on built-in function map in module __builtin__:

map(...)
map(function, sequence[, sequence, ...]) -> list

Return a list of the results of applying the function to the items of
the argument sequence(s). If more than one sequence is given, the
function is called with an argument list consisting of the corresponding
item of each sequence, substituting None for missing values when not all
sequences have the same length. If the function is None, return a list of
the items of the sequence (or a list of tuples if more than one sequence).

これを見て、2つ以上の引数を与えると、リストが得られるのが分かります。実際に、その動作を確認してみましょう。