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() はリストを返します。

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

ここで、Python2 に焦点を当てましょう。 まず、この xrange() オブジェクトを少し調べてみたいと思います。
オブジェクトの型と、xrange オブジェクトがあるかどうかを確認します。
type(xrange(6))
出力
<type 'xrange'>
次に、リストをラップするとどうなるかを見ていきます。
list(xrange(6))
出力
[0, 1, 2, 3, 4, 5]
次に、xrange(6) を a という名前の変数に割り当て、range() オブジェクトを作成し、それを b 変数に割り当てます。 a と b の両方のサイズを取得するために 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 ではるかに高速であるためです。
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
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません
