Próbuję napisać kod zgodny z PEP-8 do krajowego projektu (muszę przyznać, że to moje pierwsze kroki w świecie Pythona) i mam f-string o długości ponad 80 znaków
- ciągła cienka linia w pobliżu kropki w self.text to znak 80 znaków. (Przepraszamy za smutny link bez podglądu, ale muszę mieć ponad 10 przedstawicieli, aby je opublikować)
Próbuję podzielić to na różne linie w najbardziej pytoniczny sposób, ale jedyną odpowiedzią, która faktycznie działa, jest błąd dla mojego lintera
Kod roboczy:
def __str__(self):
return f'{self.date} - {self.time},\nTags:' + \
f' {self.tags},\nText: {self.text}'
Wynik:
2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text
Linter myśli, że nie przestrzegam E122 z PEP-8, czy jest sposób, aby uzyskać prawidłowy ciąg i zgodny z kodem?
python
string
python-3.6
f-string
Sowy
źródło
źródło
f
nie ma tam mowy o strunach.Odpowiedzi:
Z przewodnika po stylu dla kodu w języku Python :
Biorąc to pod uwagę, poniższe rozwiązania rozwiązałyby Twój problem w sposób zgodny z PEP-8.
return ( f'{self.date} - {self.time}\n' f'Tags: {self.tags}\n' f'Text: {self.text}' )
Ciągi Pythona będą automatycznie łączone, jeśli nie są oddzielone przecinkiem, więc nie musisz jawnie wywoływać
join()
.źródło
Myślę, że tak
return f'''{self.date} - {self.time}, Tags: {self.tags}, Text: {self.text}'''
źródło
Możesz użyć potrójnych pojedynczych cudzysłowów lub potrójnych podwójnych cudzysłowów, ale umieść f na początku ciągu:
Potrójne pojedyncze cytaty
return f'''{self.date} - {self.time}, Tags:' {self.tags}, Text: {self.text}'''
Potrójne podwójne cytaty
return f"""{self.date} - {self.time}, Tags:' {self.tags}, Text: {self.text}"""
Zauważ, że nie musisz używać "\ n", ponieważ używasz łańcucha wieloliniowego.
źródło
Jak wspomniał @noddy, podejście to działa również w przypadku wyrażenia przypisania zmiennej:
var1 = "foo" var2 = "bar" concat_var = (f"First var is: {var1}" f" and in same line Second var is: {var2}") print(concat_var)
powinien dać ci:
First var is: foo and in same line Second var is: bar
źródło