McA wrote:
On 17 Jul., 18:33, Gary Herron <[EMAIL PROTECTED]> wrote:
In Python 2.x, you can't do that directly, but you should be able to
create a function that lengthens or shortens an input tuple of arguments
to the correct length so you can do:
a,c,b = fix(1,2)
d,e,f = fix(1,2,3,4)
However, the function won't know the length of the left hand side
sequence, so it will have to be passed in as an extra parameter or hard
coded.
Hi Gary,
thank you for the answer.
Do you know the "protocol" used by python while unpacking?
Is it a direct assingnment? Or iterating?
Both I think, but what do you mean by *direct* assignment?
Best regards
Andreas Mock
--
http://mail.python.org/mailman/listinfo/python-list
It RHS of such an assignment can be any iterable (I think). Lets test:
(The nice thing about an interactive Python session, it that it's really
easy to test.)
>>> L = [1,2,3]
>>> a,b,c=L
>>> a,b=L
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> a,b,c,d=L
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 3 values to unpack
>>> G = (f for f in [1,2,3]) # A generator expression
>>> a,b,c = G
>>> G = (f for f in [1,2,3]) # A generator expression
>>> a,b = G
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> G = (f for f in [1,2,3]) # A generator expression
>>> a,b,c,d = G
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 3 values to unpack
I'd call that direct assignment with values supplied by any iterable.
Gary Herron
--
http://mail.python.org/mailman/listinfo/python-list