Python's iterable unpacking is what Lispers might call a destructuring bind.
py> iterable = 1, 2, 3, 4, 5
py> a, b, *rest = iterable
py> a, b, rest
(1, 2, (3, 4, 5))
Clojure also supports mapping destructuring. Let's add that to Python!
py> mapping = {"a": 1, "b": 2, "c": 3}
py> {"a": x, "b": y, "c": z} = mapping
py> x, y, z
(1, 2, 3)
py> {"a": x, "b": y} = mapping
Traceback:
ValueError: too many keys to unpack
I hope to keep discussion in this thread focused on the most basic form of dict unpacking, but we could extended mapping unpacking similarly to how PEP 3132 extended iterable unpacking. Just brainstorming...
py> mapping = {"a": 1, "b": 2, "c": 3}
py> {"a": x, **rest} = mapping
py> x, rest
(1, {"b": 2, "c": 3})