Wie füge ich den Wert einer Variablen in eine Zeichenfolge ein?

Lesezeit: 3 Minuten

Benutzer-Avatar
Gisch

Ich möchte eine setzen int in ein string. Das mache ich im Moment:

num = 40
plot.savefig('hanning40.pdf') #problem line

Ich muss das Programm für mehrere verschiedene Zahlen ausführen, also möchte ich eine Schleife machen. Aber das Einfügen der Variablen wie folgt funktioniert nicht:

plot.savefig('hanning', num, '.pdf')

Wie füge ich eine Variable in einen Python-String ein?

Benutzer-Avatar
Dan McDougall

Oh, die vielen, vielen Wege…

Verwenden f-Saiten:

plot.savefig(f'hanning{num}.pdf')

Dies wurde in 3.6 hinzugefügt und ist die neue bevorzugte Methode.


Verwenden str.format():

plot.savefig('hanning{0}.pdf'.format(num))

String-Verkettung:

plot.savefig('hanning' + str(num) + '.pdf')

Konvertierungsbezeichner:

plot.savefig('hanning%s.pdf' % num)

Lokale Variablennamen verwenden (ein netter Trick):

plot.savefig('hanning%(num)s.pdf' % locals())

Verwenden string.Template:

plot.savefig(string.Template('hanning${num}.pdf').substitute(locals()))

Siehe auch:

  • Um den Format-String-Operator mit mehreren Argumenten zu verwenden, kann man ein Tupel als Operanden verwenden: 'foo %d, bar %d' % (foo, bar).

    – fiedl

    8. August 2014 um 15:38 Uhr

  • Ihr netter Trick funktioniert auch mit der neuen Formatsyntax: plot.savefig('hanning{num}s.pdf'.format(**locals()))

    – Bild

    10. Oktober 2014 um 4:30 Uhr

  • hatte Probleme mit locals() innerhalb einer Funktion, die eine globale Variable aufruft; verwendete stattdessen % globals(), was funktionierte

    – Lobi

    14. Februar 2020 um 12:40 Uhr


  • „Einen sollte es geben – und am besten nur eine — offensichtlicher Weg, es zu tun.”.

    – MAChitgarha

    15. August 2021 um 21:38 Uhr

  • @MAChitgarha: Wunschdenken, aber nichts, was möglicherweise für eine Sprache gelten könnte, die sich im Laufe der Zeit entwickelt hat.

    – Martinau

    7. Februar um 23:58 Uhr

Mit die Einführung von formatierten String-Literalen (kurz “f-strings”) in Python 3.6 ist es nun möglich, dies mit einer kürzeren Syntax zu schreiben:

>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'

Mit dem in der Frage angegebenen Beispiel würde es so aussehen

plot.savefig(f'hanning{num}.pdf')

  • Es scheint, dass F-Strings mit mehrzeiligen Strings kompatibel sind.

    – Stevoisiak

    30. Oktober 2017 um 20:23 Uhr


Benutzer-Avatar
Bernstein

plot.savefig('hanning(%d).pdf' % num)

Das % -Operator, wenn Sie einer Zeichenfolge folgen, ermöglicht es Ihnen, Werte in diese Zeichenfolge über Formatcodes einzufügen (die %d in diesem Fall). Weitere Einzelheiten finden Sie in der Python-Dokumentation:

printf-Stil Zeichenfolgenformatierung

  • Notiere dass der % -Operator ist ab Python 3.1 veraltet. Der neue bevorzugte Weg ist die Verwendung von .format() Methode wie in besprochen PEP 3101 und in Dan McDougalls Antwort erwähnt.

    – Chris Müller

    16. Juli 2015 um 14:18 Uhr


  • Das % Operator ist nicht veraltet – es ist jetzt einfach nicht der bevorzugte Weg.

    – Kaya3

    13. September 2021 um 12:59 Uhr

Benutzer-Avatar
goggin13

Sie können verwenden + als die normale String-Verkettungsfunktion sowie str().

"hello " + str(10) + " world" == "hello 10 world"

Benutzer-Avatar
Yehonatan

Im Allgemeinen können Sie Zeichenfolgen erstellen mit:

stringExample = "someString " + str(someNumber)
print(stringExample)
plot.savefig(stringExample)

Benutzer-Avatar
Jonathan R.

Wenn Sie mehrere Werte in die Zeichenfolge einfügen möchten, können Sie diese verwenden format

nums = [1,2,3]
plot.savefig('hanning{0}{1}{2}.pdf'.format(*nums))

Würde in der Zeichenfolge resultieren hanning123.pdf. Dies kann mit jedem Array erfolgen.

Benutzer-Avatar
Raja

Ich brauchte eine erweiterte Version davon: Anstatt eine einzelne Zahl in eine Zeichenfolge einzubetten, musste ich eine Reihe von Dateinamen der Form „Datei1.pdf“, „Datei2.pdf“ usw. generieren. So geht es hat funktioniert:

['file' + str(i) + '.pdf' for i in range(1,4)]

  • Das Listenverständnis ist für die Frage von OP nicht relevant, und die von Ihnen verwendete Zeichenfolgenformatierungstechnik wird bereits in der obersten Antwort und der Antwort von goggin13 behandelt. Bitte posten Sie keine Antworten, die eine andere Frage beantworten, oder doppelte Lösungen. Siehe Antworten. In jedem Fall gibt es keinen Grund, manuell zu verwenden str(); Es ist viel einfacher, zum Beispiel F-Saiten zu verwenden: f'file{i}.pdf'

    – wjandrea

    24. Juli um 18:39 Uhr


1091460cookie-checkWie füge ich den Wert einer Variablen in eine Zeichenfolge ein?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy