Sie können den Namen der Variablen dynamisch erhalten, indem Sie die Variable 'globals' innerhalb einer Funktion aktualisieren und die innerhalb eines Blocks definierten Variablen verfolgen. Hier ist ein Beispiel:
keys1 = set(globals().keys())
a = 1
b = 1
c = 2
d = (a,b)
keys2 = set(globals().keys())
vals = [a,b,c,d]
new_keys = [ key for key in new_keys if globals()[key] in vals]
new_keys = keys2.difference(keys1)
new_keys = [ key for key in new_keys if globals()[key] in vals]
print(new_keys)
myg = globals()
for key in new_keys:
myg[key] = (val,key) # jetzt zeigt die Variable auch auf den Schlüssel
for key in new_keys:
myg[key] = (globals()[key],key)
# jetzt zeigt die Variable auch auf den Schlüssel
print(a,b,c,d)
Und sobald Sie die Namen Ihrer Variablen haben, können Sie die globals Variable erneut modifizieren, um die Werte der Variablen wiederherzustellen. Dies kann mit einem Kontext-Manager gemacht werden.
Bemerkung, Sie können nicht alle Variablen von globals() ändern, da dies möglicherweise zu Problemen führt. Daher habe ich es auf die Verwendung von Variablen beschränkt, die auf globals definiert sind.
Außerdem ist die vollständige Lösung nicht unbedingt thread-sicher, und die Variablen, die innerhalb des Kontextes definiert sind, müssen freigegeben werden, bevor sie erneut zugewiesen werden, damit "new_keys" zumindest die Namen der neuen Variablen enthält.