ここでは基本的な繰り返し for 文について説明します。もう少し正確にいうと、ここでの繰り返しはイリタブル( iterable / 意味 反復可能) なオブジェクトを使っての繰り返しということになります。
次のコードは辞書 (dict) クラスを使っての繰り返しです。辞書クラスのitems()というメソッドを使います。メソッド items() が返却するのは dict_items クラスのイリタブルなインスタンスです。この dict_items は辞書の要素を返します。この例ではタプルになっている辞書の要素がtに代入されます。for 文の ‘:’ の後ろが処理のブロックになります。ここではprint()を使い出力しています。
# File: forsample.py
# 辞書の要素はタプルとなる
prfm_dict={ 'a-chan': 'Perfume', 'KASHIYUKA': 'Perfume', 'NOCCHi': 'Perfume'}
for t in prfm_dict.items():
print(t)下の例では m にはキーが、p には要素が入っています。メソッド items() が要素2つのタプルを返してくるので、そのタプルの要素を個々の変数に入れています。 pass 文は何もしない文です。 for文 には else が使えます。これはforが正常に終了した時に実行されます。たとえば下のコードで辞書が壊れていたら(Perfume以外で登録されていたら)、’Dictionary is compromised キー 値’が出力されます。辞書が壊れていなかったら(全員がPerfumeであったら)’Dictionary check is finished’が出力されます。forループから抜け出た時に、最後まで処理したものと、しないもので後の処理が違う時、簡単に区別が出来るので便利です。
# passは何もしない
# elseはforが終了時に実行される.
for m,p in prfm_dict.items():
if p == 'Perfume':
pass
else:
print('Dictionary is compromised',m,p)
break
else:
print('Dictionary check is finished')range()はイリタブルなクラスrangeのインスタンスを返す関数です。forでループ回数を指定する時などに使うと便利です。処理としてはクラスrangeのインスタンスからの値をiに代入することになります。一見、関数range()はリストになった数字列を返却するような気がしますが、もし、それをすると一過的な処理でしかないものに余計なメモリを消費してしまうことになります。そういうことを避けるような仕組みをPythonは用意しています。range()はゼロオリジン、つまり0から始まりますので注意してください。
# 回数ループに必須のrange() : ゼロオリジン
# iterableなオブジェクトを返す関数
print(range(10))
for i in range(5):
print(i)
# 範囲も使える
for i in range(20,23):
print(i)
# ステップも刻める
for i in range(0,100,20):
print(i)
# こんな使い方も出来る
print(sum(range(10)))