Python の range ってなに?




整数の集まりを表すオブジェクト





例えば range(3) なら 0, 1, 2 の集まりを表しています。

for i in range(3):
    print(i)




上のコードを絵にするなら、こんな感じです。 f:id:domodomodomo:20180805143809j:plain f:id:domodomodomo:20180805143819j:plain f:id:domodomodomo:20180805143826j:plain f:id:domodomodomo:20180805143833j:plain



f:id:domodomodomo:20180805030512j:plain



もちろんそう言った側面もありますが、for 文で取り扱うときは、数字の集まりだと考えておいてください。実際、次のように数字の集まりを参照することができます。

>>> # range(3) は 0 ~ 2 のオブジェクトの集まりです。
>>> r = range(3)
>>> r[0]
0
>>> r[1]
1
>>> r[2]
2
>>> r[3]
3
>>>


range(0, 10, 2) なら 0 ~ 9 までの数のうちの偶数となります。

>>> r = range(0, 10, 2)
>>> r[0]
0
>>> r[1]
2
>>> r[2]
4
>>> r[3]
6
>>> r[4]
8
>>> 


また、よくある誤解で "range 関数" と表記されていますが range はクラスです。Python 2 ではリストを返す関数でしたが...。

# Python 3
type(range) is type  # True
# Python 2
import types
type(range) is types.BuiltinFunctionType  # True

なんで 「range は数字の集まり」だと考えておくといいの?

答え: for 文はオブジェクトを1つ1つ取り出すように設計されているから。

Python を習いたての頃は range(3) と書いて 3 回繰り返すと習ったかもしれません。その理解でも、全く問題ありません。

ただ for 文をもう少し踏み込んで理解しようと思った時に range は 繰り返すためのものと理解していると少し引っかかってしまいます。

次のページでは for 文とは一体何かについて解説しています。