web-dev-qa-db-fra.com

Chaîne f multiligne en Python

J'essaie d'écrire du code compatible PEP-8 pour un projet domestique (je dois admettre que ce sont mes premières étapes dans le monde python) et j'ai une chaîne f qui est plus de 80 caractères de long

 - la ligne mince continue près du point à self.text est la marque de 80 caractères. (Désolé pour le triste lien sans aperçu, mais je dois avoir plus de 10 représentants pour les poster)

J'essaie de le diviser en différentes lignes de la manière la plus Pythonique mais la seule réponse qui fonctionne réellement est une erreur pour mon linter

Code de travail:

def __str__(self):
    return f'{self.date} - {self.time},\nTags:' + \
    f' {self.tags},\nText: {self.text}'

Sortie:

2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text

Le linter pense que je ne respecte pas E122 de PEP-8, existe-t-il un moyen d'obtenir la bonne chaîne et le code conforme?

36
Owlzy

De Guide de style pour Python :

Le moyen préféré pour encapsuler les longues lignes est d'utiliser la continuation de ligne implicite de Python entre parenthèses, crochets et accolades.

Compte tenu de cela, ce qui suit résoudrait votre problème d'une manière conforme au PEP-8.

return (
    f'{self.date} - {self.time}\n'
    f'Tags: {self.tags}\n'
    f'Text: {self.text}'
)

Les chaînes Python seront automatiquement concaténées lorsqu'elles ne seront pas séparées par une virgule, vous n'avez donc pas besoin d'appeler explicitement join().

20
noddy

Je pense que ce serait

return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''
19
Joran Beasley

Comme mentionné par @noddy, l'approche fonctionne également pour l'expression d'affectation de variable:

var1 = "foo"
var2 = "bar"
concat_var = (f"First var is: {var1}"
              f" and in same line Second var is: {var2}")
print(concat_var)

devrait vous donner:

First var is: foo and in same line Second var is: bar
0
codarrior