Hier ist ein Ansatz. Ich würde dies für nichts Wichtiges empfehlen, da es ziemlich spröde sein wird. Aber es kann getan werden.
Erstellen Sie eine Funktion, die das inspectModul verwendet, um den Quellcode zu finden, der es aufgerufen hat. Anschließend können Sie den Quellcode analysieren, um die Variablennamen zu identifizieren, die Sie abrufen möchten. Hier ist beispielsweise eine aufgerufene Funktion autodict, die eine Liste von Variablen verwendet und ein Wörterbuch zurückgibt, das Variablennamen ihren Werten zuordnet. Z.B:
x = 'foo'
y = 'bar'
d = autodict(x, y)
print d
Würde geben:
{'x': 'foo', 'y': 'bar'}
Das Überprüfen des Quellcodes selbst ist besser als das Durchsuchen des locals()oder globals()weil der letztere Ansatz Ihnen nicht sagt, welche der Variablen die gewünschten sind.
Hier ist auf jeden Fall der Code:
def autodict(*args):
get_rid_of = ['autodict(', ',', ')', '\n']
calling_code = inspect.getouterframes(inspect.currentframe())[1][4][0]
calling_code = calling_code[calling_code.index('autodict'):]
for garbage in get_rid_of:
calling_code = calling_code.replace(garbage, '')
var_names, var_values = calling_code.split(), args
dyn_dict = {var_name: var_value for var_name, var_value in
zip(var_names, var_values)}
return dyn_dict
Die Aktion erfolgt in der Zeile mit inspect.getouterframes, die die Zeichenfolge innerhalb des aufgerufenen Codes zurückgibt autodict.
Der offensichtliche Nachteil dieser Art von Magie besteht darin, dass Annahmen darüber getroffen werden, wie der Quellcode strukturiert ist. Und natürlich funktioniert es überhaupt nicht, wenn es im Interpreter ausgeführt wird.
pip3 install python-varname==0.1.5; importiert mitfrom varname import nameof