list() strange behaviour
Terry Reedy
tjreedy at udel.edu
Sat Jan 23 09:43:45 EST 2021
On 1/23/2021 2:54 AM, Unknown wrote:
> Le 20/12/2020 à 21:00, danilob a écrit :
>
>>
>>
>> b = ((x[0] for x in a))
>>
>
> There is a useless pair of parenthesis
>
> b = (x[0] for x in a)
>
> b is a GENERATOR expression
>
> first list(b) calls next method on b repetedly until b is empty.
> So it provides the "content" of b
>
> second list(b) provides nothing since b is empty
> (there is no reset on generators)
There is for generator *functions*, which some people also call
generators. For generator expressions, the interpreter makes an
anonymous generator function, calls it, keeping the returned generator.
It deletes the function and 'returns' the generator as the value of
the function.
If one want to iterator twice, write a proper named generator function
with a docstring. In this case
def gf(a):
"Return a generator that yields the first item of each sequence in a."
for x in a:
yield x[0]
--
Terry Jan Reedy
More information about the Python-list
mailing list