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' がありません