Warnung 1: Wie in den Dokumenten angegeben, funktioniert dies nicht garantiert bei allen Python-Implementierungen:
Details zur CPython-Implementierung: Diese Funktion basiert auf der Unterstützung von Python-Stack-Frames im Interpreter, die nicht in allen Implementierungen von Python garantiert ist. Wenn diese Funktion in einer Implementierung ohne Python-Stack-Frame-Unterstützung ausgeführt wird, gibt sie None zurück.
Warnung 2: Diese Funktion verkürzt den Code zwar, widerspricht jedoch wahrscheinlich der Python-Philosophie, so explizit wie möglich zu sein. Darüber hinaus werden die Probleme, auf die John Christopher Jones in den Kommentaren hingewiesen hat, nicht behandelt, obwohl Sie eine ähnliche Funktion erstellen könnten, die mit Attributen anstelle von Schlüsseln funktioniert. Dies ist nur eine Demonstration, dass Sie das tun können, wenn Sie wirklich wollen!
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'
Mit dieser Lösung können Sie einige der Schlüssel auswählen, nicht alle, wie in JavaScript. Es ist auch sicher für vom Benutzer bereitgestellte Wörterbücher