logo

Python の range() と xrange() の比較

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() が使用されます。