[Tutor] don't understand iteration

eryksun eryksun at gmail.com
Tue Nov 11 15:19:35 CET 2014


On Tue, Nov 11, 2014 at 4:52 AM, Alan Gauld <alan.gauld at btinternet.com> wrote:
> On 11/11/14 04:45, Clayton Kirkwood wrote:
>
>>>> *list(range(1,6))
>>
>>    File "<input>", line 1
>> SyntaxError: can use starred expression only as assignment target
>
> list() is a function. You cannot unpack a function.
>
> Also the * operator needs to be used inside a function parameter list.
> (There may be some obscure case where you can use it outside of that but 99%
> of the time that's the only place you'll see it used.)

Python 3 extended unpacking:

    >>> a, *bcd, e = 'abcde'
    >>> a
    'a'
    >>> bcd
    ['b', 'c', 'd']
    >>> e
    'e'

    >>> for x, *rest in ('abc', 'de'):
    ...     print(x, rest)
    ...
    a ['b', 'c']
    d ['e']


>>>>> a = list(range(*5))
>
> And here 5 is an integer. It must be a sequence.

Any iterable suffices.

Refer to the table in section 8.4.1 for an overview of container interfaces:
http://docs.python.org/3/library/collections.abc

A common non-sequence example is unpacking a generator:

    >>> gen = (c.upper() for c in 'abcde')
    >>> print(*gen, sep='-')
    A-B-C-D-E

A generator is an iterable:

    >>> gen = (c.upper() for c in 'abcde')
    >>> type(gen)
    <class 'generator'>

    >>> hasattr(gen, '__iter__')
    True
    >>> isinstance(gen, collections.Iterable)
    True

and also an iterator:

    >>> hasattr(gen, '__next__')
    True
    >>> isinstance(gen, collections.Iterator)
    True

    >>> it = iter(gen)
    >>> it is gen
    True

    >>> next(it), next(it), next(it), next(it), next(it)
    ('A', 'B', 'C', 'D', 'E')
    >>> next(it)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration


More information about the Tutor mailing list