NameError: 名前 'xrange' が Python で定義されていません

Salman Mehmood 2024年2月15日
NameError: 名前 'xrange' が Python で定義されていません

Python3 で xrange() 関数を呼び出すとエラーが発生する理由を学び、この問題を修正する方法を確認します。 また、range()xrange() の違いを学び、異なる Python バージョンで range() 関数を使用する方法を確認します。

NameError: name 'xrange' is not defined xrange() 関数を使用する場合 Python3

Python2 から Python3 への移行の大部分は、Python3 に xrange() 関数が存在しなくなったことです。 Python2 と Python3 を並べて使用して比較し、両方のバージョンの Python での range()xrange() の違いを確認します。

まず、xrange() 関数を使用できる Python2 環境を使用しますが、Python2 環境には range() 関数もあります。 これらの関数の動作がわずかに異なることがわかります。 xrange()xrange() オブジェクトを返し、range() はリストを返します。

Python2 Use xrange and range - Output

Python3 では、range() 関数は range() オブジェクトを返しますが、Python2 では range() 関数はリストを返します。 基本的に、xrange() はジェネレーターであり、range() も Python3 のジェネレーターです。

Python3 使用範囲 - 出力

ここで、Python2 に焦点を当てましょう。 まず、この xrange() オブジェクトを少し調べてみたいと思います。

オブジェクトの型と、xrange オブジェクトがあるかどうかを確認します。

type(xrange(6))

出力

<type 'xrange'>

次に、リストをラップするとどうなるかを見ていきます。

list(xrange(6))

出力

[0, 1, 2, 3, 4, 5]

次に、xrange(6)a という名前の変数に割り当て、range() オブジェクトを作成し、それを b 変数に割り当てます。 ab の両方のサイズを取得するために sys をインポートします。

このコードを Python シェルで実行すると、両方の変数のサイズに大きな違いがあることがわかります。

>>> import sys
>>> a=xrange(6)
>>> b=range(6)
>>> sys.getsizeof(a)
32
>>> sys.getsizeof(b)
112

xrange() オブジェクトのサイズは range() よりも小さいため、xrange()range() よりも高速です。

Python3 は xrange() 関数をサポートしていないため、実行速度が速いため、初心者は通常、Python3 で xrange() 関数を使用しようとするとエラー (name 'xrange' is not defined) が発生します。

# in python 3
xrange(6)

出力:

NameError: name 'xrange' is not defined

Python3 では、xrange() オブジェクトは range() オブジェクトになりました。

# in python 3
>>> range(6)
range(0, 6)

sys をインポートして、Python3 のリストと range() オブジェクトのサイズを確認してみましょう。

# in python 3
>>> a=range(6)
>>> b=[0,1,2,3,4,5]
>>> import sys
>>> sys.getsizeof(a)
48
>>> sys.getsizeof(b)
152

リストに匹敵する 48 を取得しました。 Python2 の xrange() と Python3 の range() は、おそらく同様の速度で実行され、メモリ内で同様の容量を消費することがわかります。

Python3 環境では、前述のように xrange() が存在しないため、xrange() 関数を使用できません。 Python3 に組み込まれることはありませんでした。 xrange() の代わりに range() 関数を使用できます。これは、range() 関数が Python3 ではるかに高速であるためです。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Python Error