IPythonなどのインタラクティブ環境でPythonいじってたら、リスト型じゃなくジェネレータ型だったため、
In [2]: foo()
Out[2]: <generator object foo at 0x7f1f35a3dee8>
のように表示され、イラッとした経験、あると思います。特にPython3になってから顕著になったと思います。
そんなときは、まぁ、list(foo())
に修正すればいいわけなんですが。
Ctrl+A (もしくはHome), 'l', 'i', 's', 't', '(', Ctrl+E (もしくはEnd), ')'
と、8キーも押さないといけません。面倒です。イラッとします。
そこでふと思いついたのですが。
class Apply:
def __init__(self, f):
self.f = f
def __lt__(self, x):
return self.f(x)
L = Apply(list)
と、一度書いてしまえば、
In [2]: foo()
Out[2]: <generator object foo at 0x7f1f35a3dee8>
イラッとしても、
In [8]: foo() >L
Out[8]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
ってするだけで、簡単にリストになりますね。
$HOME/.ipython/profile_default/startup
ディレクトリに50-apply.py
とでも作っておけば、以後、イラッとしても落ち着いて >L
でリストにできますね。