NameError: Name `xrange` ist in Python nicht definiert
Wir werden erfahren, warum wir einen Fehler erhalten, wenn wir die Funktion xrange()
in Python3 aufrufen, und sehen, wie wir dieses Problem beheben können. Wir werden auch den Unterschied zwischen range()
und xrange()
lernen und sehen, wie man die range()
-Funktion in verschiedenen Python-Versionen verwendet.
NameError: name 'xrange' is not defined
Bei Verwendung der xrange()
-Funktion Python3
Sie wissen vielleicht, dass ein großer Teil des Übergangs von Python2 zu Python3 darin besteht, dass die Funktion xrange()
in Python3 nicht mehr existiert. Wir werden Python2 und Python3 nebeneinander verwenden und sie vergleichen und die Unterschiede zwischen range()
und xrange()
in beiden Python-Versionen sehen.
Zuerst verwenden wir eine Python2-Umgebung, in der wir die Funktion xrange()
verwenden können, aber die Python2-Umgebung hat auch die Funktion range()
. Wir werden sehen, dass sich diese Funktionen etwas anders verhalten; xrange()
gibt ein xrange()
-Objekt zurück und range()
gibt eine Liste zurück.
In Python3 gibt die Funktion range()
ein range()
-Objekt zurück, während in Python2 die Funktion range()
eine Liste zurückgibt. Grundsätzlich ist xrange()
ein Generator, und range()
ist auch ein Generator in Python3.
Konzentrieren wir uns nun auf Python2. Dieses xrange()
-Objekt wollen wir zuerst ein wenig untersuchen.
Wir werden sehen, welchen Typ es hat und ob wir ein xrange
-Objekt haben.
type(xrange(6))
Ausgang
<type 'xrange'>
Als nächstes werden wir sehen, was passiert, wenn wir eine Liste darum wickeln.
list(xrange(6))
Ausgang
[0, 1, 2, 3, 4, 5]
Nun weisen wir xrange(6)
einer Variablen namens a
zu, erstellen ein range()
-Objekt und weisen dieses der Variablen b
zu. Wir werden sys
importieren, um die Größe von a
und b
zu erhalten.
Wenn wir diesen Code in der Python-Shell ausführen, sollten wir einen großen Unterschied zwischen beiden Variablengrößen bemerken.
>>> import sys
>>> a=xrange(6)
>>> b=range(6)
>>> sys.getsizeof(a)
32
>>> sys.getsizeof(b)
112
Das Objekt xrange()
ist kleiner als range()
, deshalb ist xrange()
schneller als range()
.
Aufgrund der schnelleren Ausführung versuchen Anfänger normalerweise, die Funktion xrange()
in Python3 zu verwenden, und erhalten eine Fehlermeldung (name 'xrange' is not defined
), weil Python3 die Funktion xrange()
nicht unterstützt.
# in python 3
xrange(6)
Ausgang:
NameError: name 'xrange' is not defined
In Python3 wurde das Objekt xrange()
zum Objekt range()
.
# in python 3
>>> range(6)
range(0, 6)
Lassen Sie uns sys
importieren, um die Größen der list- und range()
-Objekte in Python3 zu sehen.
# in python 3
>>> a=range(6)
>>> b=[0,1,2,3,4,5]
>>> import sys
>>> sys.getsizeof(a)
48
>>> sys.getsizeof(b)
152
Wir haben 48, was viel besser mit der Liste vergleichbar ist. Sie können sehen, dass xrange()
von Python2 und range()
von Python3 wahrscheinlich mit einer ähnlichen Geschwindigkeit laufen und ähnlich viel Speicherplatz beanspruchen würden.
In der Python3-Umgebung können wir die Funktion xrange()
nicht verwenden, da xrange()
wie gesagt nicht mehr existiert; es wurde nie in Python3 gemacht. Wir können die Funktion range()
anstelle von xrange()
verwenden, da die Funktion range()
in Python3 viel schneller ist.
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.
LinkedInVerwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung