Ich habe etwas Code, der eine Menge String-Formatierungen macht. Oft habe ich am Ende Code mit folgenden Zeilen:
%Vor%Wo ich versuche, eine große Anzahl von Variablen in eine große Zeichenfolge zu interpolieren.
Gibt es einen guten Grund, keine Funktion wie diese zu schreiben, die das Modul inspect
verwendet, um zu interpolierende Variablen zu finden?
Ein einfacherer und sicherer Ansatz wäre der folgende Code. inspect.currentframe ist nicht bei allen Implementierungen von Python verfügbar, sodass der Code unterbrochen wird, wenn dies nicht der Fall ist. Unter jython, ironpython oder pypy ist es vielleicht nicht verfügbar, weil es eine Cpython-Sache zu sein scheint. Dies macht Ihren Code weniger portabel.
%Vor%Diese Technik wird im Kapitel Python-Lernprogramm
beschriebenDies könnte auch geschehen, indem Sie die Tabelle als Schlüsselwortargumente mit übergeben die Notation **. Dies ist besonders nützlich in Kombination mit der neue integrierte vars () -Funktion, die ein Wörterbuch mit enthält alle lokalen Variablen.
auch in den Python-Dokumenten für inspect.currentframe
CPython-Implementierungsdetail: Diese Funktion basiert auf Python-Stack Frame-Unterstützung im Interpreter, für die nicht garantiert wird alle Implementierungen von Python. Wenn in einer Implementierung ohne ausgeführt wird Python Stack Frame unterstützt diese Funktion gibt None zurück.
Update: Python 3.6 hat diese Funktion (eine leistungsfähigere Variante) eingebaut:
%Vor%Siehe PEP 0498 - String-Interpolation
Es [manuelle Lösung] führt zu etwas überraschendem Verhalten mit verschachtelten Funktionen:
%Vor%Hinweis: Derselbe Aufruf ist erfolgreich oder schlägt fehl, je nachdem, ob eine Variable oberhalb oder unterhalb davon erwähnt wird.
Wo callerscope
ist:
% inspect
ist im Modul currentframe
wie folgt definiert:
Wenn also sys
kein _getframe
-Attribut hat, funktioniert die interpolate
-Funktion nicht.
Die Dokumentation für sys._getframe
say:
CPython-Implementierungsdetail: Diese Funktion sollte verwendet werden für nur interne und spezialisierte Zwecke. Es ist nicht garantiert zu existieren in allen Implementierungen von Python.
Schreiben
%Vor%im Funktionskörper ist nicht viel länger als
%Vor%und Ihr Code wird portabler.
Tags und Links python