Sto cercando di costruire una stringa di formato con l'argomento pigro, ad esempio, ho bisogno smth come:pitone, stringa di formato
"%s \%s %s" % ('foo', 'bar') # "foo %s bar"
come posso fare questo?
Sto cercando di costruire una stringa di formato con l'argomento pigro, ad esempio, ho bisogno smth come:pitone, stringa di formato
"%s \%s %s" % ('foo', 'bar') # "foo %s bar"
come posso fare questo?
"%s %%s %s" % ('foo', 'bar')
è necessario %%
"%s %%s %s" % ('foo', 'bar') # easy!
Il doppio carattere% consente di inserire% nelle stringhe di formato.
Basta utilizzare un secondo simbolo di percentuale.
In [17]: '%s %%s %s' % ('foo', 'bar')
Out[17]: 'foo %s bar'
>>> "%s %%s %s" % ('foo', 'bar')
'foo %s bar'
%%
sfugge il simbolo %
. Quindi, in pratica non resta che scrivere:
"%s %%s %s" % ('foo', 'bar') # "foo %s bar"
E se mai è necessario per emettere una percentuale o qualcosa:
>>> "%s %s %%%s" % ('foo', 'bar', '10')
'foo bar %10'
con Python 2.6:
>>> '{0} %s {1}'.format('foo', 'bar')
'foo %s bar'
o con Python 2.7:
>>> '{} %s {}'.format('foo', 'bar')
'foo %s bar'
Se non si 'T conoscere l'ordine degli argomenti saranno essere comunicate, è possibile utilizzare i modelli di stringa
Ecco una classe autonomo che si atteggia a str
con questa funzionalità (solo per argomenti chiave)
class StringTemplate(str):
def __init__(self, template):
self.templatestr = template
def format(self, *args, **kws):
from string import Template
#check replaced strings are in template, remove if undesired
for k in kws:
if not "{"+k+"}" in self:
raise Exception("Substituted expression '{k}' is not on template string '{s}'".format(k=k, s=self))
template= Template(self.replace("{", "${")) #string.Template needs variables delimited differently than str.format
replaced_template= template.safe_substitute(*args, **kws)
replaced_template_str= replaced_template.replace("${", "{")
return StringTemplate(replaced_template_str)
Python 3.6 ora supporta stenografia letterale interpolazione stringa con PEP 498. Per il vostro caso d'uso, la nuova sintassi permette:
var1 = 'foo'
var2 = 'bar'
print(f"{var1} %s {var2}")
stupido limitazione di 30 caratteri:/ –
sono d'accordo. :-) [anche sui commenti] – payne