range() と xrange() は、特定の回数を反復するために使用できる 2 つの関数です。 のために Python のループ。で Python3 , xrange はありませんが、range 関数は Python2 の xrange と同じように動作します。 Python2 と Python3 の両方で実行されるコードを作成したい場合は、 range() を使用する必要があります。どちらも異なる方法で実装されており、異なる特性が関連付けられています。比較のポイントは次のとおりです。
- 戻り値の型
- メモリ
- 操作の使用法
- スピード
Python の range() 関数
の Python の range() 関数 指定された範囲内の一連の数値を返します。最も一般的な使用法は、Python ループを使用して一連の数値を反復処理することです。
Pythonのxrange()関数
Python の xrange() 関数は、Python range() 関数と同様に、一連の数値を生成するために使用されます。 Python xrange() は Python 2.x でのみ使用されますが、Python の range() 関数は Python 3.x で使用されます。
range() と xrange() の戻り値の型
これ xrange() 関数は次の値を返します ジェネレーターオブジェクト ループするだけで数値を表示するために使用できます。特定の範囲のみがオンデマンドで表示されるため、 遅延評価 一方、Python の range() 関数は範囲オブジェクト (反復可能オブジェクトの一種) を返します。
Python3
# initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the type of a> print>(>'The return type of range() is : '>)> print>(>type>(a))> # testing the type of x> print>(>'The return type of xrange() is : '>)> print>(>type>(x))> |
>
yメールとは何ですか
>
出力:
The return type of range() is : The return type of xrange() is :>
xrange() および range() 関数の速度
を格納する変数 範囲 range() によって作成されました より多くのメモリを必要とする xrange() を使用して範囲を格納する変数と比較します。この基本的な理由は、 range() の戻り値の型が list であり、xrange() が xrange() オブジェクトであるためです。
Python3
import> sys> # initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the size of a> # range() takes more memory> print> (>'The size allotted using range() is : '>)> print> (sys.getsizeof(a))> # testing the size of x> # xrange() takes less memory> print> (>'The size allotted using xrange() is : '>)> print> (sys.getsizeof(x))> |
JavaScript 印刷
>
>
出力:
The size allotted using range() is : 80064 The size allotted using xrange() is : 40>
操作 xrange() および range() 関数の使用法
range() はリスト、つまり、実行されるすべての操作を返します。 できる リストに適用されるものはリスト上で使用できます。一方、xrange() は xrange オブジェクトを返すため、リストに関連付けられた操作は できない それらに適用されるため、不利な点があります。
Python3
部分文字列メソッドJava
# initializing a with range()> a>=> range>(>1>,>6>)> # initializing a with xrange()> x>=> xrange>(>1>,>6>)> # testing usage of slice operation on range()> # prints without error> print> (>'The list after slicing using range is : '>)> print> (a[>2>:>5>])> # testing usage of slice operation on xrange()> # raises error> print> (>'The list after slicing using xrange is : '>)> print> (x[>2>:>5>])> |
>
>
エラー:
Traceback (most recent call last): File '1f2d94c59aea6aed795b05a19e44474d.py', line 18, in print (x[2:5]) TypeError: sequence index must be integer, not 'slice'>
出力:
The list after slicing using range is : [3, 4, 5] The list after slicing using xrange is :>
Python の range() と xrange() の違い
xrange() は遅延評価で必要な値のみを含むジェネレーター オブジェクトのみを評価するため、 もっと早く 実装では range() よりも異なります。
重要な点:
- Python 2 と Python 3 の両方で実行されるコードを作成する場合は、xrange 関数が Python 3 で非推奨になっているため、range() を使用します。
- 同じシーケンスを複数回繰り返す場合、 range() は高速になります。
- xrange() は毎回整数オブジェクトを再構築する必要がありますが、 range() は実際の整数オブジェクトを持ちます。 (ただし、メモリのパフォーマンスは常に低下します)
| 範囲() | xrange() |
|---|---|
| 整数のリストを返します。 | ジェネレーターオブジェクトを返します。 |
| 実行速度が遅くなる | 実行速度が速くなります。 |
| 要素のリスト全体をメモリ内に保持するため、より多くのメモリが必要になります。 | メモリ内に一度に 1 つの要素だけを保持するため、メモリ使用量が少なくなります。 |
| リストを返すので、すべての算術演算を実行できます。 | このような操作は xrange() では実行できません。 |
| Python 3 では、xrange() はサポートされていません。 | Python 2 では、for ループを反復するために xrange() が使用されます。 |