<div dir="ltr">Hello. Currently during star assignement the new list is created. <br>What was the idea to produce new list instead of returning an iterator? <br>It seems to me that returning an iterator more suited to the spirit of Python 3. <br>There are three cases:<br><br>1. a,b,c,*d = something_iterable<br>2. *a,b,c,d = something_iterable<br>3. a,*b,c,d = something_iterable<br><br>The first one is obvious. For the rest two we always need to iterate through <br>entire iterable to achieve values for b,c,d (or c,d) binding. But this can be done <br>more memory effiecient than currently (may be I'm wrong). And we can iterate in <br>space of last three (or two) variables. Some rough (simplified) Python code:<br><br>from itertools import islice, chain<br>from collections import deque<br><br>def good_star_exp(signature, seq):<br>    <br>    if signature.count('*') > 1:<br>        raise SyntaxError('two starred expressions in assignment')<br>    <br>    vrs = signature.split(',')<br>    idx_max = len(vrs) - 1<br>    star_pos, = (i for i,v in enumerate(vrs) if '*' in v) <br>    <br>    #First case<br>    if star_pos == idx_max:<br>        head = islice(seq, idx_max)<br>        tail = islice(seq, idx_max, None)<br>        return chain(head, (tail,))<br>    <br>    #Second case<br>    elif star_pos == 0:<br>        tail = deque(maxlen=idx_max)       <br>        for seq_idx_max, v in enumerate(seq):<br>            tail.append(v)      <br>        head = islice(seq, 0, seq_idx_max-(idx_max-1))       <br>        return chain([head], tail)<br>    <br>    #Third case<br>    else:<br>        head = islice(seq, star_pos)<br>        tail = deque(maxlen=(idx_max-star_pos))  <br>        for seq_idx_max, v in enumerate(seq):<br>            tail.append(v)<br>        mid = islice(seq, star_pos, seq_idx_max-(idx_max-2))<br>        return chain(head, [mid], tail)<br>        <br>ls = range(100000)<br>a,b,c,d = good_star_exp('a,b,c,*d', ls)<br>a,b,c,d = good_star_exp('*a,b,c,d', ls)<br>a,b,c,d = good_star_exp('a,*b,c,d', ls)<br><br>Of course this version has drawbacks (the first that come to mind):<br>1. Will *b see change if rhs is some muttable sequence?<br>2. Will *b one way iterator or somethong like range?<br><br>But still it seems to me that the "iterator way" has more useful applications.<br><br>With best regards, -gdg<br></div>