Kurzform für string.format (..., ** localhosts ())

8

Ich verwende normalerweise das folgende Muster (wie in diese Frage ):

%Vor%

Ich denke, es ist eine gute Möglichkeit, leicht lesbaren Code zu schreiben.

Manchmal ist es sinnvoll, String-Formate zu "verketten", um die Erstellung komplexer Strings zu "modularisieren":

%Vor%

Sehr bald wird der Code mit X.format(**locals()) belästigt. Um dieses Problem zu lösen, habe ich versucht, ein Lambda zu erstellen:

%Vor%

, aber dies wirft einen KeyError, da locals() die Locals von Lambda sind.

Ich habe auch versucht, das Format nur auf die letzte Zeichenfolge anzuwenden:

%Vor%

Aber das funktioniert nicht, da Python nur einmal formatiert. Nun konnte ich eine Funktion schreiben, die wiederholt formatiert, bis nichts mehr zu tun ist:

%Vor%

Aber ich frage mich: Gibt es einen besseren Weg, dies zu tun?

    
goncalopp 23.10.2013, 18:50
quelle

4 Antworten

4

f = lambda x, l=locals(): x.format(**l) scheint zu funktionieren ...

und wenn du eine Version haben wolltest, die etwas umfassender ist (und wahrscheinlich viel langsamer):

%Vor%

findet die Symbole entweder in Locals oder in Globals.

    
Corley Brigman 23.10.2013 18:55
quelle
2

Wenn Sie dies nur innerhalb des Funktionsumfangs als lokale Verknüpfung ausführen müssen, funktioniert Folgendes:

%Vor%

Dies bindet jedoch den von locals() zurückgegebenen Wert zum Zeitpunkt der Funktionsdeklaration und nicht zur Ausführung. Daher wird er nicht aktualisiert, wenn sich Werte ändern, noch ist er nützlich, wenn er aus einem anderen Bereich aufgerufen wird.

Wenn Sie Zugriff auf die locals der aufrufenden Methode erhalten möchten, müssen Sie inspect die Aufrufliste ( Ссылка )

%Vor%

Beachten Sie, dass dies möglicherweise nicht für Implementierungen von Python funktioniert, die nicht CPython sind.

Jetzt können Sie tun:

%Vor%     
John Spong 23.10.2013 20:56
quelle
0
___ qstntxt ___

Ich verwende normalerweise das folgende Muster (wie in diese Frage ):

%Vor%

Ich denke, es ist eine gute Möglichkeit, leicht lesbaren Code zu schreiben.

Manchmal ist es sinnvoll, String-Formate zu "verketten", um die Erstellung komplexer Strings zu "modularisieren":

%Vor%

Sehr bald wird der Code mit **locals() belästigt. Um dieses Problem zu lösen, habe ich versucht, ein Lambda zu erstellen:

%Vor%

, aber dies wirft einen KeyError, da string#format die Locals von Lambda sind.

Ich habe auch versucht, das Format nur auf die letzte Zeichenfolge anzuwenden:

%Vor%

Aber das funktioniert nicht, da Python nur einmal formatiert. Nun konnte ich eine Funktion schreiben, die wiederholt formatiert, bis nichts mehr zu tun ist:

%Vor%

Aber ich frage mich: Gibt es einen besseren Weg, dies zu tun?

    
___ answer19550076 ___

%code% scheint zu funktionieren ...

und wenn du eine Version haben wolltest, die etwas umfassender ist (und wahrscheinlich viel langsamer):

%Vor%

findet die Symbole entweder in Locals oder in Globals.

    
___ answer19550669 ___

Es ist kein One-Liner, aber es funktioniert:

%Vor%

Hier ist eine rekursive Version mit einer Zeile (und etwas weniger effizient):

%Vor%     
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ qstnhdr ___ Kurzform für string.format (..., ** localhosts ()) ___ tag123lambda ___ Anonyme Funktionen oder Closures in Programmiersprachen wie Lisp, C #, C ++, Lua, Python, Ruby, Javascript oder Java. (Auch Lambda-Ausdruck.) ___ antwort43319449 ___

Beginnend mit Python 3.6 ist der Effekt von %code% bereits in %code% oder besser "formatierten String-Literalen" enthalten.

Siehe auch PEP 498 und Python 3.6-Versionshinweise .

    
___ tag123scope ___ Scope ist ein einschließender Kontext, in dem Werte und Ausdrücke verknüpft sind. Verwenden Sie dieses Tag für Fragen zu verschiedenen Arten von Bereichen sowie für Fragen, deren Umfang unklar sein könnte. ___ answer19552124 ___

Wenn Sie dies nur innerhalb des Funktionsumfangs als lokale Verknüpfung ausführen müssen, funktioniert Folgendes:

%Vor%

Dies bindet jedoch den von %code% zurückgegebenen Wert zum Zeitpunkt der Funktionsdeklaration und nicht zur Ausführung. Daher wird er nicht aktualisiert, wenn sich Werte ändern, noch ist er nützlich, wenn er aus einem anderen Bereich aufgerufen wird.

Wenn Sie Zugriff auf die %code% der aufrufenden Methode erhalten möchten, müssen Sie %code% die Aufrufliste ( Ссылка )

%Vor%

Beachten Sie, dass dies möglicherweise nicht für Implementierungen von Python funktioniert, die nicht CPython sind.

Jetzt können Sie tun:

%Vor%     
___ tag123stringformatting ___ Bezieht sich allgemein auf eine Reihe von Methoden, um eine beliebige Anzahl verschiedener Datentypen in einer Zeichenkette anzuzeigen. ___
geekQ 10.04.2017 09:26
quelle
0

Es ist kein One-Liner, aber es funktioniert:

%Vor%

Hier ist eine rekursive Version mit einer Zeile (und etwas weniger effizient):

%Vor%     
martineau 23.10.2013 19:27
quelle