ロゴ

プログラミング初心者がアプリ開発を目指すブログ

【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

スポンサード リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA