[Python-de] Wie sieht Python fuer mich aus?

Mike Müller mmueller at python-academy.de
Mo Jan 9 18:17:54 EST 2017


Am 09.01.17 um 06:23 schrieb Stefan Schwarzer:

> 
>>   »range(2,7)« ergibt einen Bereich (einen Iterator) und
>>   »range(2)« bedeutet »range(0,2)«.
> 
> In Python 2 ergibt `range` eine Liste, in Python 3 einen
> Iterator.

Hier geht es etwas genauer. ;)

`range` in Python 3 gibt keinen Iterator sonder ein `range`-Objekt
zurück:

   >>> type(range(10))
   range

Wichtige Unterschiede:

* `range` unterstützt kein `next`:
  >>> next(range(10))
  TypeError: 'range' object is not an iterator

* `range`-Objekte lassen sich indizieren
  >>> r = range(10)
  >>> r[0]
  0
  Iteratoren nicht:
  >>> i = iter('abc')
  >>> i[0]
  TypeError: 'str_iterator' object is not subscriptable

* `range`-Objekte lassen sich immer wieder in Listen (oder
  andere Sequenzen) umwandeln:
  >>> r = range(10)
  >>> list(r)
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  >>> list(r)
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  Itertoren sind dagegen "einmalig":
  >>> i = iter('abc')
  >>> list(i)
  ['a', 'b', 'c']
  >>> list(i)
  []

Bei einer (typischen) Nutzung in einer `for`-Schleife:

   >>> for x in range(10):

gibt es allerdings keine Unterschiede.

Mike



Mehr Informationen über die Mailingliste python-de