#range()関数とは
引数に指定したサイズの数列を返す関数。
どうやら返り値は数列(?)ではないみたいです。のちのち触れます。
range()関数は引数によって挙動が変わります。
公式ドキュメントで学習した範囲には3パターンありましたので、それぞれ紹介していきます。
##range(整数値)
第一引数のみを指定するパターンです。
負の数を渡した場合、数列は返ってきません。
以下にコードと動作例を示します。
for i in range(4):
print(i)
#出力結果
0
1
2
3
0から引数に指定した整数値を含まない範囲の数列を得ることができます。
##range(開始値, 終了値)
第一引数に得る数列の開始値、第二引数に得る数列の終了値を渡すパターンです。
ここでも終了値は含まないことに注意。
以下にソースコードと動作例を示します。
for i in range(5, 7):
print(i)
#出力結果
5
6
##range(開始値, 終了値, 足し合わせる値)
第二引数までは1つ前のパターンと同様であり、第三引数に足し合わせる値を指定します。
ここでも終了値は含まないことに注意。
以下にソースコードと動作例を示します。
for i in range(0, -10, -3):
print(i)
#出力結果
0
-3
-6
-9
#range()関数の返り値は数列?
出力結果だけを見れば数列が返ってきているのでは?と思うかもしれません。
がしかし、次のコードを試すと何かがわかます。
print(range(100))
print(range(100).__class__.__name__)
#出力結果
range(0, 100)
range
1行目の出力結果からわかるように、range()関数の返り値は数列ではありません。
ではなんなんだ? というところで、2つ目の出力結果を見ると range と出ています。
2行目のコードで行っているのは、range()関数の出力結果に対して型名を得ています。
つまり、range()関数の出力結果はrange型のオブジェクトであるとわかります。
##range型とは
整数を要素とするimmutableなシーケンス(複数の値を順番に並べたものの一塊として保持する型)
を生成するオブジェクトのこと。
シーケンスには、rangeの他にもリストなども含まれるようです。
リストやrangeのスーパークラスがシーケンスなのかな?という感じです。
#開発環境
Windows10 64bit
Python 3.7.1
PyCharm 2018.3.2
#参考資料
学習に用いているものとして、以下の2つがメインです。
・詳細! Python 3 入門ノート
・Python公式ドキュメント