2015年11月19日

リテラル整数のメソッド

リテラル整数のメソッドの呼び方を、実例を挙げて紹介します。


以下のような、リストデータと関数があったとします。

# 月別の日数
>>> days = (31, 28, 31, 30, 31, 30,
...         31, 31, 30, 31, 30, 31)

# 条件に合う要素を数える関数
>>> def count_if(data, predicate):
...     return sum(predicate(i) for i in data)
...

count_if() の使い方は以下のようになります。引数 predicate には lambda を使うのが最も簡単と思われます。
>>> count_if(days, lambda x: x == 31)
7

>>> count_if(days, lambda x: x <= 30)
5

上記 lambda と同じ動作を、整数のメソッドを渡すことでも実現できます。通常は演算子を通して呼ばれる __eq__() や __gt__() といったメソッドを、引数として渡してやります。
注意点として、リテラル整数のメソッドを呼ぶときには、ドットが小数点でないことを示すために、整数を () で括る必要があります。31.__eq__ のように呼ぶとエラーとなります。
>>> count_if(days, (31).__eq__)
7

>>> count_if(days, (30).__ge__)
5
この書き方、簡潔と言えば簡潔ですが、__eq__ などのメソッドはあまり見かけないこともあり、可読性はイマイチでしょうか。特に不等式の表現は、通常の > 、>= の方がずっと読みやすいように思います。
とは言え、このような書き方もあるということを、知識として知っておいて損はないと思います。

0 件のコメント:

コメントを投稿