Предупреждение 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. Это также безопасно для пользовательских словарей