[Python-es] metodo mas pythonico para strings multilinea con variables largas

Chema Cortes pych3m4 en gmail.com
Sab Mar 16 07:31:27 EDT 2019


El sáb., 16 mar. 2019 a las 2:47, AGTUGO (<agtugo en gmail.com>) escribió:

> Objetivo de esta discusi'on no es llegar a un "depende del gusto" , el
> objetivo es determinar con las guias de estilo disponibles, que es lo mas
> pythonico. Saludos.
>
>
Según el Zen de Python: "There should be one-- and preferably only one
--obvious way to do it."
Me temo que en este caso tenemos demasiadas formas de hacer una misma cosa.

Hay una discusion similar aqui
> https://stackoverflow.com/questions/10660435/pythonic-way-to-create-a-long-multi-line-string
> pero el nombre de la variable es corto
>
>
> # El problema es que tengo que partir muchas veces  el string cuando la
> variable tiene
> #un nombre muy largo a pesar del inconveniente que esto representa estoy a
> favor
> #de nombres descriptivos para las variables
>
> # lo que quiero evitar es partir muchas veces la linea
> #Aclaro que esto ya es pythonico pero quiero ahorrar espacio.
> this_is_a_very_long_variable =  "this is my really, really, really,
> really, really, really," \
>                                                     "really, really,
> really  really, really, really, really, really," \
>                                                     " really long string
> that I'd like to shorten."
>
> #Esta Solucion me parece adecuada, solo el inconveniente de escribir la
> diagonal
> #en cada caso, ganamos espacio y agregamos identacion para identificar que
> es parte
> #del string
>
> this_is_a_very_long_variable =  \
>     "this is my really, really, really, really, really, really," \
>     "really, really, really  really, really, really, really, really," \
>     " really long string that I'd like to shorten."
>
> #Mi metodo favorito hasta ahora, no hay necesidad de agregar una diagonal
> en cada
> #linea, me molesta un poco visualmente el parentesis (supongo que para eso
> no hay solucion)
>
> this_is_a_very_long_variable =  (
>     "this is my really, really, really, really, really, really,"
>     "really, really, really  really, really, really, really, really,"
>     " really long string that I'd like to shorten.")
>
>
Atendiendo a las reglas de estilo (PEP8): "The preferred way of wrapping
long lines is by using Python's implied line continuation inside
parentheses, brackets and braces". O sea, la preferida sería la última que
has puesto con los paréntesis. No entiendo porqué te molesta el paréntesis.
La mayoría de los IDEs ya se encargan de cerrar el paréntesis y las
comillas mientras escribes, por lo que es bastante cómodo. Visualmente se
puede confundir con una tupla, eso sí. El carácter de continuación ('\')
está desaconsejado últimamente y sólo habría algún caso para el que siga
siendo práctico.



> #esto agrega saltos de linea y me parece una solucion muy fea porque no
> hay identacion
> #no es realmente una solucion pero es para ver si la de ideas a alguien.
>
> this_is_a_very_long_variable = \
> """this is my really, really, really, really, really, really,
> really, really, really  really, really, really, really, really,
> really long string that I'd like to shorten."""
>
>
No es lo mismo una string en varias líneas que una string multilínea. Sin
tener en cuenta que los saltos de línea, el margen se podría haber resuelto
al estilo scala, quitándolo al final:

this_is_a_very_long_variable = """
    |this is my really, really, really, really, really, really,
    |really, really, really  really, really, really, really, really,
    |really long string that I'd like to shorten.""".*stripMargin*

Los IDEs de scala facilitan la escritura añadiendo automáticamente el
margen al saltar de línea. En python no queda más remedio que crear una
función para que lo haga, o bien, usar expresiones regulares:

import re

strip_margin = re.compile("\n\W*\|")

this_is_a_very_long_variable = strip_margin.sub('', """
    |this is my really, really, really, really, really, really,
    |really, really, really  really, really, really, really, really,
    |really long string that I'd like to shorten.""")

Saludos



> --
> Arturo Muñoz
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190316/a937e0cd/attachment.html>


Más información sobre la lista de distribución Python-es