Попередження 1: як зазначено в документах, це не гарантовано буде працювати на всіх реалізаціях Python:
Деталізація реалізації CPython: Ця функція покладається на підтримку кадру стеку Python в інтерпретаторі, яка не гарантується у всіх реалізаціях Python. Якщо робота в реалізації без підтримки кадру стека Python, ця функція повертає None.
Попередження 2: ця функція робить код коротшим, але, ймовірно, це суперечить філософії Python, щоб бути якомога явнішим. Більше того, це не стосується питань, на які вказував Джон Крістофер Джонс у коментарях, хоча ви можете зробити подібну функцію, яка працює з атрибутами замість клавіш. Це лише демонстрація того, що ви можете це зробити, якщо дуже хочете!
def destructure(dict_):
if not isinstance(dict_, dict):
raise TypeError(f"{dict_} is not a dict")
parent_frame = inspect.currentframe().f_back
(line,) = inspect.getframeinfo(parent_frame).code_context
lvalues, _equals, _rvalue = line.strip().partition("=")
keys = [s.strip() for s in lvalues.split(",") if s.strip()]
if missing := [key for key in keys if key not in dict_]:
raise KeyError(*missing)
for key in keys:
yield dict_[key]
In [5]: my_dict = {"hello": "world", "123": "456", "key": "value"}
In [6]: hello, key = destructure(my_dict)
In [7]: hello
Out[7]: 'world'
In [8]: key
Out[8]: 'value'
Це рішення дозволяє вибрати деякі клавіші, а не всі, як у JavaScript. Це також безпечно для словників, що надаються користувачем