Esempio di rubino:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La concatenazione di stringhe Python di successo mi sembra molto dettagliata.
Esempio di rubino:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La concatenazione di stringhe Python di successo mi sembra molto dettagliata.
Risposte:
Python 3.6 aggiungerà un'interpolazione letterale di stringhe simile all'interpolazione di stringhe di Ruby. A partire da quella versione di Python (che dovrebbe essere rilasciata entro la fine del 2016), sarai in grado di includere espressioni in "f-string", ad es.
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Prima del 3.6, il più vicino a questo è
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
L' %
operatore può essere utilizzato per l'interpolazione di stringhe in Python. Il primo operando è la stringa da interpolare, il secondo può avere diversi tipi tra cui una "mappatura", mappando i nomi dei campi sui valori da interpolare. Qui ho usato il dizionario delle variabili locali locals()
per mappare il nome del campo name
al suo valore come variabile locale.
Lo stesso codice che utilizza il .format()
metodo delle versioni recenti di Python sarebbe simile al seguente:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
C'è anche la string.Template
classe:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
per una stringa e %03d
per un numero imbottito di 3 cifre con zeri iniziali. Potrebbe essere solo scritto print "%s has %03d" % ("Python", 2)
. L'esempio utilizza quindi l'inserimento di una chiave di mappatura tra parentesi dopo la %
quale è un modo per assegnare ai segnaposto nomi significativi anziché fare affidamento sul loro ordine nella stringa. Quindi si passa un dizionario che associa i nomi delle chiavi ai loro valori. Ecco perché Sven sta usando la locals()
funzione che restituisce un dict contenente tutte le variabili locali in modo da mappare name
sul valore del nome
s
tipo di conversione: Python può convertire qualsiasi cosa in una stringa. Ma ovviamente perderai le speciali capacità di formattazione di altri tipi di conversione.
Da Python 2.6.X potresti voler usare:
"my {0} string: {1}".format("cool", "Hello there!")
%
operatore per l'interpolazione di stringhe non è obsoleto in Python 3.x. docs.python.org/dev/py3k/whatsnew/… annuncia il piano di deprezzamento a %
partire dalla 3.1, ma ciò non è mai accaduto.
{}
può essere eliminato.
Ho sviluppato il pacchetto interpy , che abilita l'interpolazione di stringhe in Python .
Basta installarlo tramite pip install interpy
. E poi, aggiungi la riga # coding: interpy
all'inizio dei tuoi file!
Esempio:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
L'interpolazione di stringhe di Python è simile a C's printf ()
Se provi:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Il tag %s
verrà sostituito con la name
variabile. Dovresti dare un'occhiata ai tag delle funzioni di stampa: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
L'interpolazione di stringhe verrà inclusa in Python 3.6 come specificato in PEP 498 . Sarai in grado di fare questo:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Nota che odio Spongebob, quindi scrivere questo è stato leggermente doloroso. :)
Puoi anche avere questo
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
stampa. Stanno solo usando la sintassi di Ruby.
#
personaggio sarebbe stato stampato.
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)
Uso:
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: le prestazioni potrebbero essere un problema. Ciò è utile per gli script locali, non per i log di produzione.
duplicato:
Per il vecchio Python (testato su 2.4) la soluzione migliore indica la strada. Puoi farlo:
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()
E tu ottieni
d: 1 f: 1.1 s: s
Python 3.6 e versioni successive hanno un'interpolazione letterale di stringhe usando f-string:
name='world'
print(f"Hello {name}!")
name
tratta di una variabile locale che si trova nella stringa e in Python è necessario passare esplicitamente il dizionario delle variabili locali al formattatore di stringhe se si desidera che le utilizzi.