Estoy tratando de construir una cadena de formato con el argumento perezoso, por ejemplo, necesito SMTH como:pitón, cadena de formato
"%s \%s %s" % ('foo', 'bar') # "foo %s bar"
cómo puedo hacer esto?
Estoy tratando de construir una cadena de formato con el argumento perezoso, por ejemplo, necesito SMTH como:pitón, cadena de formato
"%s \%s %s" % ('foo', 'bar') # "foo %s bar"
cómo puedo hacer esto?
"%s %%s %s" % ('foo', 'bar')
necesita %%
"%s %%s %s" % ('foo', 'bar') # easy!
Double% chars le permite poner% 's en las cadenas de formato.
sólo tiene que utilizar un segundo símbolo de porcentaje.
In [17]: '%s %%s %s' % ('foo', 'bar')
Out[17]: 'foo %s bar'
>>> "%s %%s %s" % ('foo', 'bar')
'foo %s bar'
%%
escapa el símbolo %
. Así que, básicamente, sólo hay que escribir:
"%s %%s %s" % ('foo', 'bar') # "foo %s bar"
Y si alguna vez lo que necesita para dar salida a un porcentaje o algo:
>>> "%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'
Si usted don Sé el orden serán suplied los argumentos, puede utilizar las plantillas de cadena
Aquí es una clase contenida yo que se hace pasar por un str
con esta funcionalidad (sólo para los argumentos de palabra clave)
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 ahora soporta abreviatura literal interpolación de cadenas con PEP 498. Por su caso de uso, la nueva sintaxis permite:
var1 = 'foo'
var2 = 'bar'
print(f"{var1} %s {var2}")
estúpida restricción de 30 caracteres:/ –
estoy de acuerdo. :-) [en los comentarios, también] – payne