Understanding generators in Python

前端 未结 12 1548
日久生厌
日久生厌 2020-11-21 05:46

I am reading the Python cookbook at the moment and am currently looking at generators. I\'m finding it hard to get my head round.

As I come from a Java background, i

12条回答
  •  难免孤独
    2020-11-21 06:06

    Generators could be thought of as shorthand for creating an iterator. They behave like a Java Iterator. Example:

    >>> g = (x for x in range(10))
    >>> g
     at 0x7fac1c1e6aa0>
    >>> g.next()
    0
    >>> g.next()
    1
    >>> g.next()
    2
    >>> list(g)   # force iterating the rest
    [3, 4, 5, 6, 7, 8, 9]
    >>> g.next()  # iterator is at the end; calling next again will throw
    Traceback (most recent call last):
      File "", line 1, in 
    StopIteration
    

    Hope this helps/is what you are looking for.

    Update:

    As many other answers are showing, there are different ways to create a generator. You can use the parentheses syntax as in my example above, or you can use yield. Another interesting feature is that generators can be "infinite" -- iterators that don't stop:

    >>> def infinite_gen():
    ...     n = 0
    ...     while True:
    ...         yield n
    ...         n = n + 1
    ... 
    >>> g = infinite_gen()
    >>> g.next()
    0
    >>> g.next()
    1
    >>> g.next()
    2
    >>> g.next()
    3
    ...
    

提交回复
热议问题