Java/Python 導入ガイド《9》引数に関数オブジェクトを

記事一覧入門編基礎編応用編中級編

Java プログラマーのための Python 導入ガイド〈初級/入門編〉《Jython2.5.0》
《9》引数に関数オブジェクトを

《著》森こねこ・本間りす・小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

》作業中です《 2006年7月 6日 (木)

■ 概要

Java™ Programming Language〔JPL〕の事例を使って、JavaJython との違いを学びます。

引数に関数オブジェクトを

先の《事例》では、3つの関数を統合した xfilter なら、引数に list/set/dict を自由に指定できるようになりました。しかし、どの要素を削除するかを自由に選択できません。そこで、新たな引数を導入して、削除したい要素を自由に選択できるようにすると、次のようになります。

>>> def xfilter(c, cond):
... for e in filter(lambda e: cond(e), c):
...     if isinstance(c, dict):
...         del c[e]
...     else:
...         c.remove(e)

引数 cond には、削除したい要素を選べるように、関数オブジェクトを指定します。

リスト:list

>>> c = range(5)
>>> c
[0, 1, 2, 3, 4]
>>> xfilter(c, lambda e: e<3)
>>> c
[3, 4]

関数 xfilter を使うと、リスト c から、3 より小さい要素だけが削除され、期待した副作用が得られた分かります。

集合:set

>>> c = set(range(5))
>>> c
set([0, 1, 2, 3, 4])
>>> xfilter(c, lambda e: e<3)
>>> c
set([3, 4])

関数 xfilter を使うと、集合 c から、3 より小さい要素だけが削除され、期待した副作用が得られた分かります。

写像:dict

>>> c = dict([(k,v) for k,v in enumerate("ABCDE")])
>>> c
{0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}
>>> xfilter(c, lambda e: e<3)
>>> c
{3: 'D', 4: 'E'}

関数 xfilter を使うと、辞書 c から、3 より小さいキー要素を含む要素対だけが削除され、期待した副作用が得られた分かります。

Last updated♪2009/08/04