イテラブルとイテレータ

INPUT · スライド

なぜ同じ for で回せるのか

01 / 06

同じ書きかたが、どれにも効いた

ここまで for をいろいろなものに使ってきた。リスト、文字列、辞書、range、ファイル。どれも同じ書きかたで回せたね。

これは偶然ではないよ。Pythonがそう作られているからだ。この章では、その仕組みのふたを開けてみる。

for kudamono in ["りんご", "みかん"]:    print(kudamono)for moji in "あい":    print(moji)

実行結果

りんご
みかん
あ
い

02 / 06

回せるもの、イテラブル

for で回せるもののことを、イテラブル(回せるもの)と呼ぶよ。英語の iterable で、「くり返せる」という意味だ。

ここまでに出てきたものは、ぜんぶイテラブルだった。

  • リスト
  • 文字列
  • 辞書
  • タプル
  • range が作るもの
  • 開いたファイル

「for に渡せるものがイテラブル」。それだけの言葉だよ。

tens = {"ゆい": 90, "そう": 60}for namae in tens:    print(namae)for kazu in range(2):    print(kazu)

実行結果

ゆい
そう
0
1

03 / 06

1つずつ配る係、イテレータ

イテラブルは、自分で値を配っているわけではない。頼まれると「1つずつ取り出す係」を新しく作って渡すんだ。

この係のことを イテレータ(取り出す係)と呼ぶよ。iter という関数に渡すと、その係を見ることができる。

print(iter(["りんご", "みかん"]))<list_iterator object at 0x1234abcd>

表示は呪文みたいだけれど、意味は「リスト用の取り出し係」。うしろの数は置き場所の番地で、実行するたびに変わるよ。

04 / 06

for が裏でやっている3つのこと

for の中身は、たった3つの手順でできている。

  • イテラブルに頼んで、イテレータをもらう
  • イテレータに「次の値をくれ」と頼む
  • 「もう無い」と言われたら終わる

これだけ。だから、この3つに答えられるものなら何でも for で回せる。リストでも、ファイルでも、まだ見たことのない誰かが作った入れ物でも同じだよ。

05 / 06

回せないものを渡すと

逆に、この約束を持っていないものを for に渡すとエラーになる。数がそうだよ。

not iterable は「回せるものではない」という意味。Pythonのエラーは、この章で覚えた言葉でそのまま書かれているんだ。

for kazu in 5:    print(kazu)

実行結果

TypeError: 'int' object is not iterable

06 / 06

できることは増えないけれど

この章で新しくできるようになることは、正直に言うとほとんど無い。すでにできていたことの中身を開けて見ているだけだよ。

でも、ここを通っておくと後がずいぶん楽になる。Pythonの説明書には「for で回せます」という書きかたがあふれている。その一文の意味が、これからは正確に読めるはずだ。

次のレッスンでは、for を使わずに手で同じことをやってみるよ。