web-dev-qa-db-fra.com

Python style - continuation de ligne avec des chaînes?

En essayant d'obéir aux règles de style python), j'ai défini mes éditeurs sur un maximum de 79 colonnes.

Dans le PEP, il est recommandé d'utiliser la continuation implicite de python entre crochets, parenthèses et accolades. Cependant, lorsque je traite la limite de cols avec des chaînes, cela devient un peu bizarre.

Par exemple, essayer d’utiliser un multiligne

mystr = """Why, hello there
wonderful stackoverflow people!"""

Reviendra

"Why, hello there\nwonderful stackoverflow people!"

Cela marche:

mystr = "Why, hello there \
wonderful stackoverflow people!"

Depuis qu'il retourne ceci:

"Why, hello there wonderful stackoverflow people!"

Mais, lorsque la déclaration est en retrait de quelques blocs, cela semble étrange:

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there \
wonderful stackoverflow people!"

Si vous essayez d'indenter la deuxième ligne:

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there \
            wonderful stackoverflow people!"

Votre chaîne se termine comme:

"Why, hello there                wonderful stackoverflow people!"

Le seul moyen que j'ai trouvé pour contourner cela est:

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there" \
            "wonderful stackoverflow people!"

Ce qui me plaît mieux, mais qui me laisse aussi un peu mal à l’œil, car on dirait qu’il ya une ficelle assise au milieu de nulle part. Cela produira le bon:

"Why, hello there wonderful stackoverflow people!"

Ma question est donc la suivante: quelles sont les recommandations de certaines personnes sur la façon de procéder et y at-il quelque chose qui me manque dans le guide de style qui montre comment je devrais le faire?

Merci.

144
sjmh

Puisque les littéraux de chaîne adjacents sont automatiquement joints en une seule chaîne , vous pouvez simplement utiliser la continuation de ligne implicite dans les parenthèses, comme le recommande PEP 8:

print("Why, hello there wonderful "
      "stackoverflow people!")
217
Sven Marnach

Il suffit de souligner que l’utilisation de parenthèses appelle la concaténation automatique. C'est bien si vous les utilisez déjà dans la déclaration. Sinon, j'utiliserais simplement '\' au lieu d'insérer des parenthèses (ce que la plupart des IDE font automatiquement pour vous). Le retrait doit aligner la suite de la chaîne pour qu’il soit conforme à PEP8. Par exemple.:

my_string = "The quick brown dog " \
            "jumped over the lazy fox"
42
user3685621

Une autre possibilité consiste à utiliser le module textwrap. Cela évite également le problème de "chaîne juste assis au milieu de nulle part" comme mentionné dans la question.

import textwrap
mystr = """\
        Why, hello there
        wonderful stackoverfow people"""
print (textwrap.fill(textwrap.dedent(mystr)))
5
AliA

Je suis autour de ça avec

mystr = ' '.join(
        ["Why, hello there",
         "wonderful stackoverflow people!"])

autrefois. Ce n'est pas parfait, mais cela fonctionne bien pour les très longues chaînes qui n'ont pas besoin de sauts de ligne.

1
nmichaels

C'est une façon très propre de le faire:

myStr = ("firstPartOfMyString"+
         "secondPartOfMyString"+
         "thirdPartOfMyString")
0
Jason Schmidt