メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月13日水曜日

[Python][お勉強] Python入門(31) - ジェネレータ

Pythonではジェネレータなるものが使用できる。

通常関数はreturnステートメントで呼び出し元に戻る。再度同じ関数をコールするとまた最初から実行され、
returnステートメントで呼び出し元に戻る。
ジェネレータを使うとyeildステートメントで呼び出し元に戻る。再度同じ関数をコールすると、yeildステートメントで呼び出し元に戻ったところから実行が再開され、またyeildステートメントで呼び出し元に戻る。

ただし普通に使おうとすると(通常の関数と同じようにコールすると)、ジェネレータオブジェクトが返されるだけなので、ちょっと使い方を注意する。

ジェネレータを使用した例


>>> def aaa(x):
... for i in range(x):
... yield i ** 2
...
>>>

と定義したとする。普通の関数のようにコールすると、、、

>>> aaa(10)
<generator>
>>>
 

とジェネレータオブジェクトが返されるだけ。
なので、いったん変数に入れるなりして、、、

>>> a = aaa(10)
>>> a.next()
0
>>> a.next()
1
>>> a.next()
4
>>> a.next()
9
>>> a.next()
16
>>> a.next()
25
>>> a.next()
36
>>>
 

nextメソッドをコールしてやる。すると呼び出す度に続きから再実行される。
このnextメソッドは「イテレータオブジェクト」の機能らしい。





おしまい。
.

0 コメント: