Wenn range () ein Generator in Python 3.3 ist, warum kann ich nicht als nächstes () auf einen Bereich aufrufen?

Vielleicht bin ich Opfer von Fehlinformationen im Internet, aber ich denke, es ist eher so, dass ich etwas falsch verstanden habe. Basierend auf dem, was ich bisher gelernt habe, ist range () ein Generator und Generatoren können als Iteratoren verwendet werden. Dieser Code:

myrange = range(10) print(next(myrange)) 

Gibt mir diesen Fehler:

 TypeError: 'range' object is not an iterator 

Was fehlt mir hier Ich habe davon myrange dass ich 0 ausdrucke und auf den nächsten Wert in myrange . Ich bin neu in Python, also bitte akzeptiere meine Entschuldigung für die ziemlich grundlegende Frage, aber ich konnte keine gute Erklärung irgendwo anders finden.

One Solution collect form web for “Wenn range () ein Generator in Python 3.3 ist, warum kann ich nicht als nächstes () auf einen Bereich aufrufen?”

range ist eine Klasse von unveränderlichen iterablen Objekten. Ihr Iterationsverhalten kann mit der list verglichen werden: Sie können nicht direkt auf sie aufrufen; Du musst einen Iterator mit Hilfe von iter .

Also nein, range ist kein Generator.

Sie können denken, "warum haben sie es nicht direkt iterable gemacht"? Nun, range s haben einige nützliche Eigenschaften, die so nicht möglich wäre:

  • Sie sind unveränderlich, also können sie als Wörterbuchschlüssel verwendet werden.
  • Sie haben die start , stop und step Attribute (seit Python 3.3), __getitem__ und index Methoden und unterstützen sie, len und __getitem__ Operationen.
  • Sie können mehrmals über den gleichen range iterieren.

 >>> myrange = range(1, 21, 2) >>> myrange.start 1 >>> myrange.step 2 >>> myrange.index(17) 8 >>> myrange.index(18) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 18 is not in range >>> it = iter(myrange) >>> it <range_iterator object at 0x7f504a9be960> >>> next(it) 1 >>> next(it) 3 >>> next(it) 5 
  • Wie man zwei 3D-Plots von Matrizen auf der gleichen Figur mit der gleichen Skala in Python zu plotten
  • Warum hat Python "sonst" in "for-else" und "while-else"?
  • Python - Unterschied zwischen zwei Strings
  • Python: Wie kann man ['und'] entfernen?
  • Aufteilen einer Zeichenfolge in 2-Buchstaben-Segmente
  • Python3 Mehrfachzuordnung und Speicheradresse
  • Wie benutzt man concurrent.futures mit Timeouts?
  • Konvertieren von JSON in Wörterbuch von Python [duplicate]
  • Wie kann ich das Zeilenumbruch nach einer Druckerklärung unterdrücken?
  • Wie benutzt man eine Funktion, die eval in einer Datei enthält, die durch eine andere Datei aus einer anderen Datei definiert ist?
  • Erstellen eines geordneten Zählers
  • Python ist die beste Programmiersprache der Welt.