LoginSignup
10
9

More than 5 years have passed since last update.

IPythonで、値を見ようと思ったらジェネレータだったのでイラッとしたときに思いついたこと。

Posted at

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でリストにできますね。

10
9
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9