Commits

INADA Naoki  committed ec90e3a

generator

  • Participants
  • Parent commits ca32a8f

Comments (0)

Files changed (1)

File function.rst

 と書くのと同じ動作をします。 デコレータによって、定義した関数を置き換えられることに注目してください。
 なので、次のような関数を書くこともできます。 ::
 
+   >>> import time
    >>> def profile(func):
    ...     def wrapped(*args, **kwargs):
    ...         t = time.time()
 
 lambda を使うと、後に紹介する sort のように、関数を受け取る関数 (高階関数) に
 渡す関数を作るときに便利です。
+
+ジェネレータ
+-------------
+
+php 5.5 で導入されたジェネレータにかなり似ています。
+
+ジェネレータは、 for ループなどで列挙できる (iterable) オブジェクトを作る関数で、
+return の代わりに yield を使って1つずつ要素を返します。 ::
+
+    >>> def gen(n):
+    ...     for i in range(n):
+    ...         yield i*2
+    ...
+    >>> for x in gen(3):
+    ...     print(x)
+    ...
+    0
+    2
+    4
+
+php のジェネレータと同じく、外から値を渡す事もできます。
+この仕組みを使えばコルーチンと呼ばれる仕組みを作れるのですが、
+特殊な使い方なので、ここでは省略します。