【Python入門】Python イテレータの基本 – Python初心者勉強記012
イテレータは、データを一要素づつ処理するなど、ポインタ的な役割を果すデータ形式です。シーケンスを生成する関数からイテレータを作成するジェネレータという機能を使って生成されることが多く、これにより関数同士の実行順序を制御するなどの操作も可能です。
イテレータの作成
イテレータの作成は、一般的にジェネレータを使いますが、iter()メソッドを使用することもできます。
iter(iterableオブジェクト)
イテレータを作成したらnextメソッドを呼び出すことで、シーケンスから各要素を取り出すことができます。
>>> country = iter(['japan', 'UK', 'US'])
>>> country
>>> country.next()
'japan'
>>> country.next()
'UK'
>>> country.next()
'US'
>>>
for文によってイテレータを回すこともできます。1回for文をまわすとイテレータは終わりに達するので、2回目にfor文を利用するときは何も起こりません。
>>> countries = iter(['japan', 'UK', 'US'])
>>> for country in countries:
... print(country)
...
japan
UK
US
ジェネレータ
ジェネレータとは関数に結びつくイテレータです。数列を作り出す関数から数列の要素を逐次取り出すイテレータ(ジェネレーター)を作ることができます。
次のイテレータを進めるまで、関数内のローカル変数を保持したまま、次の要素作成までの評価が中断されます。
関数の定義内でyield文を用いると、イテレータ(ジェネレータ)を作成する関すうになります。イテレータを進めると次のyield文まで評価され値を返します。
>>> def gen(): #関数を定義する
... yield 1
... yield 2
...
>>> for x in gen():
... print(x)
...
1
2
ここではfor文でループが回る度に、gen関数内でyield文が順に呼び出され、指定した戻り値が順に返されていきます。
yield文では、値を返すだけでなく、イテレータを進めるときに、データを受け取ることもできます。このときnextメソッドでなくsendメソッドを用います。ただし、sendメソッドはnextメソッドを1回呼び出した後でないと使えません。
>>> def func():
... recieved = (yield 3) #3を返し、sendメソッドから値を受け取る
... print('recieved: %s' %recieved)
...
>>> gen = func()
>>> gen.next()
3
>>> gen.send(5)
recieved: 5
Traceback (most recent call last):
File "", line 1, in
StopIteration
Python入門講座の次の記事はこちら => 【Python入門】Python 文字列の作成 – Python初心者勉強記013