2017-05-04 12 views
0

range()関数は、あなたがカッコ内に入れた引数を持つリストを返します。しかし、IDLEにrange(4)と入力すると、range(0, 4)が出力されます。同様に、print(range(4))と入力すると、range(0, 4)も出力されます。私は現在Python 3.5を使用しています。pythonのrange()関数の戻り値は何ですか?

私は現在、「コンピュータ科学者のように考える方法」とその電子ブックで、Pythonコードを実行できるアクティブなコードブロックを提供しています。そして、私がprint(range(4))をそこに走らせたら、私が期待したリスト、つまり[0, 1, 2, 3]が得られます。

誰かがこれを私に説明できますか?

ありがとうございます!

答えて

6

あなたが読んでいる本はおそらくPython 2を使用しています。ここではrangeがリストを返します。

Python 3では、rangeは代わりにimmutable sequence typeを返します。 thisに応じ

1

range(a, b)rangeのインスタンスを返します。それはprint(type(range(1, 5)))で確認できます。

そして、あなたが期待しているのはprint(list(range(a, b)))です。

1

だからPythonの3.xの中で、範囲()関数は、独自のタイプを得ました。基本的には、forループでrange()を使いたいなら、あなたは良いことです。ただし、純粋にリストオブジェクトとして使用することはできません。たとえば、範囲タイプをスライスすることはできません。

あなたがそれにprint()を呼び出す場合は、print機能は、範囲オブジェクトの文字列表現を作成しようとしますが、この文字列表現は、リストの文字列表現に相当します。

リストをしたい場合は、あなたの本はおそらく、Pythonの2.xのを使って書かれたlist(range(<parameters>))

2

を行うことができますPython 2.xでは、range関数は実際にforループが反復するリストを返しました。 Python 3.xでは、range関数はそれ自身の型であり、実際にはジェネレータ関数なので、forループが実行されている間に数値が生成されます。

リストのようにリストに渡すと、範囲関数からリストを作成することはできます。

list(range(4)) 

次の内容のリストを出力します。

[0,1,2,3] 
関連する問題