Ruby Beispiel:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Die erfolgreiche Verkettung von Python-Strings scheint mir ausführlich zu sein.
Ruby Beispiel:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Die erfolgreiche Verkettung von Python-Strings scheint mir ausführlich zu sein.
Antworten:
Python 3.6 fügt eine Literal-String-Interpolation hinzu , die der Ruby-String-Interpolation ähnelt. Ab dieser Version von Python (die voraussichtlich Ende 2016 veröffentlicht wird) können Sie Ausdrücke in "f-Strings" einfügen, z
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Vor 3.6 können Sie dem am nächsten kommen
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
Der %
Operator kann für die Zeichenfolgeninterpolation in Python verwendet werden. Der erste Operand ist die zu interpolierende Zeichenfolge, der zweite kann verschiedene Typen haben, einschließlich einer "Zuordnung", wobei Feldnamen den zu interpolierenden Werten zugeordnet werden. Hier habe ich das Wörterbuch der lokalen Variablen verwendet locals()
, um den Feldnamen name
seinem Wert als lokale Variable zuzuordnen .
Der gleiche Code, der die .format()
Methode der letzten Python-Versionen verwendet, würde folgendermaßen aussehen:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Es gibt auch die string.Template
Klasse:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
für eine Zeichenfolge und %03d
für eine auf 3 Ziffern aufgefüllte Zahl mit führenden Nullen. Es könnte einfach geschrieben werden print "%s has %03d" % ("Python", 2)
. In diesem Beispiel wird dann ein Zuordnungsschlüssel in Klammern gesetzt %
, um den Platzhaltern aussagekräftige Namen zu geben, anstatt sich auf ihre Reihenfolge in der Zeichenfolge zu verlassen. Anschließend übergeben Sie ein Wörterbuch, das die Schlüsselnamen ihren Werten zuordnet. Aus diesem Grund verwendet Sven die locals()
Funktion, die ein Diktat zurückgibt, das alle Ihre lokalen Variablen enthält, damit es name
dem Wert von name zugeordnet wird
s
als Konvertierungstyp verwenden können - Python kann fast alles in einen String konvertieren. Aber natürlich würden Sie die speziellen Formatierungsfunktionen anderer Konvertierungstypen verlieren.
Seit Python 2.6.X möchten Sie möglicherweise Folgendes verwenden:
"my {0} string: {1}".format("cool", "Hello there!")
%
Operator für die Zeichenfolgeninterpolation in Python 3.x nicht veraltet ist. docs.python.org/dev/py3k/whatsnew/… kündigt den Plan an, %
ab 3.1 zu verwerfen , aber dies ist nie geschehen.
{}
kann ich eliminieren.
Ich habe das Interpy- Paket entwickelt, das die String-Interpolation in Python ermöglicht .
Installieren Sie es einfach über pip install interpy
. Fügen Sie dann die Zeile # coding: interpy
am Anfang Ihrer Dateien hinzu!
Beispiel:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
Die String-Interpolation von Python ähnelt der von printf ()
Wenn du es versuchst:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Das Tag %s
wird durch die name
Variable ersetzt. Sie sollten sich die Druckfunktions-Tags ansehen: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
Die String-Interpolation wird in Python 3.6 enthalten sein, wie in PEP 498 angegeben . Sie können dies tun:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Beachten Sie, dass ich SpongeBob hasse, daher war das Schreiben etwas schmerzhaft. :) :)
Sie können dies auch haben
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
zu drucken. Sie verwenden nur die Ruby-Syntax.
#
Zeichen gedruckt werden würde.
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Verwendungszweck:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
PS: Leistung kann ein Problem sein. Dies ist nützlich für lokale Skripte, nicht für Produktionsprotokolle.
Dupliziert:
Für altes Python (getestet auf 2.4) weist die Top-Lösung den Weg. Du kannst das:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
Und du verstehst
d: 1 f: 1.1 s: s
Python 3.6 und höher verfügen über eine Literal-String-Interpolation mit F-Strings:
name='world'
print(f"Hello {name}!")
name
es sich um eine lokale Variable handelt, die in der Zeichenfolge liegt. In Python müssen Sie das Wörterbuch der lokalen Variablen explizit an den Zeichenfolgenformatierer übergeben, wenn Sie diese verwenden möchten.