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 コメント:
コメントを投稿