
On 05/26/2016 12:25 PM, Paul Moore wrote:
On 26 May 2016 at 18:55, Ethan Furman wrote:
With the simple syntax that I could live with, a real example could be:
{active_id, active_ids, active_model} = context
or
{partner_id, product_id, ship_to, product_ids} = values
The behaviour of using the names of the variables from the LHS to introspect the value on the RHS is, to me, extremely magical and unlike anything I've seen in any other language. I don't think it sits well in Python, even though it is certainly a very readable idiom for the sort of unpacking we're talking about here.
One other disadvantage of this syntax is that it would break badly if someone refactored the code and renamed one of the variables. Of course, the semantics of this construct means that renaming the variables changes the meaning - but once again, that's not something I can recall ever having seen in any language.
Having said all that...
which is more readable than
(partner_id, product_id, ship_to, product_ids = (values[k] for k in ['partner_id', 'product_id', 'ship_to', 'product_ids']))
Wow. That's a lot of room for typos and wrong order.
I agree - this is pretty horrible. Although marginally better than the proposed {'partner_id': partner_id, ...} form with explicit naming of the keys.
Personally, though, I don't see *that* much wrong with
partner_id = values['partner_id'] product_id = values['product_id'] ship_to = values['ship_to'] product_ids = values['product_ids']
And this is what I currently do. But a fellow can dream, right? :) -- ~Ethan~