2011-02-08 23 views
19

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?

Respuesta

30
"%s %%s %s" % ('foo', 'bar') 

necesita %%

2
"%s %%s %s" % ('foo', 'bar') # easy! 

Double% chars le permite poner% 's en las cadenas de formato.

+1

estúpida restricción de 30 caracteres:/ –

+0

estoy de acuerdo. :-) [en los comentarios, también] – payne

1

sólo tiene que utilizar un segundo símbolo de porcentaje.

In [17]: '%s %%s %s' % ('foo', 'bar') 
Out[17]: 'foo %s bar' 
4
>>> "%s %%s %s" % ('foo', 'bar') 
'foo %s bar' 
2

%% 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' 
17

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' 
0

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) 
0

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}")