Comme PEP8 suggère de rester en dessous de la règle des 80 colonnes pour votre programme python, comment puis-je respecter cela avec de longues chaînes, c'est-à-dire
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
Comment pourrais-je étendre cela à la ligne suivante, c'est-à-dire
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
De plus, comme les constantes de chaînes voisines sont automatiquement concaténées, vous pouvez également les coder comme ceci:
Remarquez pas de signe plus, et j'ai ajouté la virgule et l'espace supplémentaires qui suivent la mise en forme de votre exemple.
Personnellement, je n'aime pas les barres obliques inverses, et je me souviens avoir lu quelque part que son utilisation est en fait déconseillée au profit de cette forme qui est plus explicite. Rappelez-vous que "explicite vaut mieux qu'implicite".
Je considère que la barre oblique inverse est moins claire et moins utile car elle échappe en fait au caractère de nouvelle ligne. Il n'est pas possible de mettre un commentaire de fin de ligne après si cela est nécessaire. Il est possible de le faire avec des constantes de chaîne concaténées:
J'ai utilisé une recherche Google de «longueur de ligne python» qui renvoie le lien PEP8 comme premier résultat, mais aussi des liens vers un autre bon article StackOverflow sur ce sujet: « Pourquoi Python PEP-8 devrait-il spécifier une longueur de ligne maximale de 79 caractères? "
Une autre bonne expression de recherche serait "continuation de la ligne python".
la source
"str1" + "str2"
plutôt que"str1" "str2"
('this is my really, really, really, really, really long {} ' 'that I'd really, really, really, like to {}').format(var1, var2))
Je pense que le mot le plus important dans votre question était "suggère".
Les normes de codage sont des choses amusantes. Souvent, les conseils qu'ils fournissent ont une très bonne base quand ils ont été écrits (par exemple, la plupart des terminaux ne peuvent pas afficher> 80 caractères sur une ligne), mais au fil du temps, ils deviennent obsolètes sur le plan fonctionnel, mais restent strictement respectés. Je suppose que ce que vous devez faire ici est de soupeser les mérites relatifs de "casser" cette suggestion particulière par rapport à la lisibilité et la mainatinabilité de votre code.
Désolé, cela ne répond pas directement à votre question.
la source
Vous avez perdu un espace et vous avez probablement besoin d'un caractère de continuation de ligne, c'est-à-dire. a
\
.ou même:
Parens fonctionnerait également à la place de la continuation de la ligne, mais vous risquez que quelqu'un pense que vous avez l'intention d'avoir un tuple et que vous venez d'oublier une virgule. Prenez par exemple:
contre:
Avec le typage dynamique de Python, le code peut s'exécuter dans les deux sens, mais produire des résultats incorrects avec celui que vous ne vouliez pas.
la source
Barre oblique inverse:
ou envelopper de parens:
la source
Ce sont toutes d'excellentes réponses, mais je n'ai pas trouvé de plugin d'éditeur qui m'aiderait à éditer des chaînes "implicitement concaténées", j'ai donc écrit un package pour me faciliter la tâche.
Sur pip (installez les paragraphes) si celui qui se promène sur ce vieux fil voudrait le vérifier. Formate les chaînes multi-lignes comme le fait HTML (compresser les espaces, deux nouvelles lignes pour un nouveau paragraphe, pas de soucis pour les espaces entre les lignes).
devient ...
Tout s'aligne facilement avec (Vim) 'gq'
la source
Avec un,
\
vous pouvez étendre les instructions à plusieurs lignes:devrait marcher.
la source
J'ai tendance à utiliser quelques méthodes non mentionnées ici pour spécifier de grandes chaînes, mais ce sont des scénarios très spécifiques. YMMV ...
Blobs de texte sur plusieurs lignes, souvent avec des jetons formatés (pas tout à fait ce que vous demandiez, mais toujours utiles):
Développez la variable pièce par pièce selon la méthode d'interpolation de chaîne que vous préférez:
Lisez-le à partir d'un fichier. PEP-8 ne limite pas la longueur des chaînes dans un fichier; juste les lignes de votre code. :)
Utilisez la force brute ou votre éditeur pour diviser la chaîne en lignes manageables à l'aide de sauts de ligne, puis supprimez tous les sauts de ligne. (Similaire à la première technique que j'ai listée):
la source
Options disponibles:
"foo" \ "bar"
"foo" + \ "bar"
("foo" "bar")
("foo" + "bar")
Éviter
Évitez les crochets avec une virgule:
("foo", "bar")
qui définit un tuple.la source
Si vous devez insérer un littéral de chaîne longue et que flake8 se ferme, vous pouvez utiliser ses directives de fermeture . Par exemple, dans une routine de test, j'ai défini de fausses entrées CSV. J'ai trouvé que le fractionner sur plus de lignes qu'il y avait de lignes serait très déroutant, j'ai donc décidé d'ajouter un
# noqa: E501
comme suit:la source
J'ai utilisé textwrap.dedent dans le passé. C'est un peu lourd donc je préfère les continuations de ligne maintenant mais si vous voulez vraiment le retrait de bloc, je pense que c'est super.
Exemple de code (où la garniture consiste à se débarrasser du premier '\ n' avec une tranche):
Explication:
dedent calcule l'indentation en fonction de l'espace blanc dans la première ligne de texte avant une nouvelle ligne. Si vous vouliez le modifier, vous pouvez facilement le réimplémenter en utilisant le
re
module.Cette méthode a des limites dans la mesure où de très longues lignes peuvent toujours être plus longues que vous le souhaitez, auquel cas d'autres méthodes de concaténation de chaînes conviennent mieux.
la source
x[1:]
vous pouvez mettre une barre oblique inverse aprèsx = """
pour éviter la première nouvelle ligne.