You are on page 1of 3

Python 3.

6: f-strings: formateo de strings en python


20/09/2018 | Autor: Eduardo Enriquez

post_detail">
Para formateo de strings en python tenemos muchas opciones:
1. %-formatting
Es fácil hay ciertas combinaciones de caracteres que si estan adentro de un string
python las interpreta para ser reemplazadas. El ejemplo es más claro que la
explicacion:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; nombre = hljs-
string">"Eduardo"
hljs-prompt">&gt;&gt;&gt; hljs-string">"Hola, %s!" % nombre
hljs-string">'Hola Eduardo!'
Y si necesito llenar con muchas cosas, pasamos uan tupla:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; nombre = hljs-
string">"Eduardo"
hljs-prompt">&gt;&gt;&gt; edad = hljs-number">35
hljs-prompt">&gt;&gt;&gt; hljs-string">"Hola %s! Tenés %s." % (nombre, edad)
hljs-string">'Hola Eduardo. Tenés 35.'
Si quiero un ancho fijo o,&nbsp;lo que es lo mismo, llenar con espacios:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; hljs-
string">'%10s' % ( hljs-string">'test' ,)
hljs-string">" test"
&nbsp;
2. str.format()
El format tiene una sintaxis que es mas sencilla de leer y ademas tiene un monton
de pontecialidades extras:&nbsp;
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; nombre = hljs-
string">"Eduardo"
hljs-prompt">&gt;&gt;&gt; hljs-string">"Hola {}. Tenés {}." .format(nombre,
hljs-number">35 )
hljs-string">'Hola Eduardo. Tenés 35.'
Para llenar con ancho fijo:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; hljs-
string">'{:&gt;10}' .format( hljs-string">'test' )
hljs-string">" test"

hljs-prompt">&gt;&gt;&gt; data = { hljs-string">'first' : hljs-string">'Hodor' ,


hljs-string">'last' : hljs-string">'Hodor!' }
hljs-prompt">&gt;&gt;&gt; hljs-string">'{first} {last}' .format(**data)
hljs-string">"Hodor Hodor!"

hljs-prompt">&gt;&gt;&gt; hljs-string">'{first} {last}' .format(first= hljs-


string">'Hodor' , last= hljs-string">'Hodor!' )
hljs-string">"Hodor Hodor!"

hljs-prompt">&gt;&gt;&gt; hljs-class"> hljs-keyword">class hljs-title">Planta


hljs-params">(object) :
type = hljs-string">'árbol'
tipos = [{ hljs-string">'nombre' : hljs-string">'roble' }, { hljs-
string">'nombre' : hljs-string">'pino' }]
hljs-prompt">&gt;&gt;&gt; hljs-string">'{p.type}: {p.tipos[0][nombre]}'
.format(p=Planta())
hljs-string">"árbol: roble"
Las infinitas posibilidades de format se pueden ver en esta excelente web:&nbsp;<a
href="https://pyformat.info/">https://pyformat.info/
&nbsp;
3. f-strings
Los f-strings se pueden usar a partir de python 3.6 y su especificacion esta en
el&nbsp;<a href="https://www.python.org/dev/peps/pep-0498/">pep-0498 . Son más
cómodos que todos los métodos anteriores. Básicamente se antepone una f a los
string que van a contener "literales"
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; nombre = hljs-
string">"Eduardo"
hljs-prompt">&gt;&gt;&gt; f hljs-string">"Hola {nombre}. Tenés {edad}."
hljs-string">'Hola Eduardo. Tenés 35.'
Como los f-strings se evalúan en tiempo de ejecución, se&nbsp;puede colocar dentro
de ellas&nbsp;todas y cada una de las expresiones válidas de Python. Esto te
permite hacer algunas cosas copadas:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; f hljs-string">"{2
* 37}"
hljs-string">'74'

hljs-prompt">&gt;&gt;&gt; name = hljs-string">"Edu"


hljs-prompt">&gt;&gt;&gt; f hljs-string">"{name.lower()} is divertido."
hljs-string">'edu is divertido'

hljs-prompt">&gt;&gt;&gt; artista = { hljs-string">'nombre' : hljs-string">'Edu'


, hljs-string">'edad' : hljs-number">35 }
hljs-prompt">&gt;&gt;&gt; f hljs-string">"El artista {artista['nombre']}, de edad
{artista['edad']}."
hljs-string">"El artista Eduardo, de edad 35."
Y para el mismo ejemplo del ancho fijo:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; ancho = hljs-
number">10
hljs-prompt">&gt;&gt;&gt; texto = hljs-string">'edu'
hljs-prompt">&gt;&gt;&gt; f hljs-string">'{texto: &lt;{ancho}}'
hljs-string">'edu '
Estan muy buenas porque te permiten hacer operaciones inplace.
<code class="language-python hljs ">ancho = hljs-number">10
precision = hljs-number">4
precio = decimal.Decimal( hljs-string">"22.34567" )

print(f hljs-string">"result: {precio:{ancho}.{precision}}" )

&gt;&gt; hljs-string">'result: 22.35'


Así son un poco más performantes que los formats tradicionales porque se resuelven
en el momento directamente:
<code class="language-python hljs ">&gt;&gt; items = list(range( hljs-number">5 ))
&gt;&gt; print(items)
[ hljs-number">0 , hljs-number">1 , hljs-number">2 , hljs-number">3 , hljs-
number">4 ]

&gt;&gt; print(f hljs-string">'Cantidad de items: {len(items)}' )


hljs-number">5
Funcionan hasta las lambda:
<code class="language-python hljs ">&gt;&gt; print(f hljs-string">'{(lambda x:
x*3)(3)}' )
hljs-string">'9'
Y para escapear llaves es muy simple:
<code class="language-python hljs "> hljs-prompt">&gt;&gt;&gt; f hljs-
string">"{{74}}"
hljs-string">'{74}'

hljs-prompt">&gt;&gt;&gt; f hljs-string">"{{{74}}}"
hljs-string">'{74}'
hljs-prompt">&gt;&gt;&gt; f hljs-string">"{{{{74}}}}"
hljs-string">'{{74}}'

Algunos links útiles:

<a href="https://www.python.org/dev/peps/pep-
0498/">https://www.python.org/dev/peps/pep-0498/
<a href="https://realpython.com/python-f-strings/">https://realpython.com/python-
f-strings/
<a href="https://medium.com/@NirantK/best-of-python3-6-f-strings-
41f9154983e">https://medium.com/@NirantK/best-of-python3-6-f-strings-41f9154983e

You might also like