Ich habe eine Zeile mit dem folgenden Code (keine Schuld an Namenskonventionen, sie gehören nicht mir):
subkeyword = Session.query(
Subkeyword.subkeyword_id, Subkeyword.subkeyword_word
).filter_by(
subkeyword_company_id=self.e_company_id
).filter_by(
subkeyword_word=subkeyword_word
).filter_by(
subkeyword_active=True
).one()
Ich mag es nicht, wie es aussieht (nicht zu lesbar), aber ich habe keine bessere Idee, Zeilen in dieser Situation auf 79 Zeichen zu beschränken. Gibt es eine bessere Möglichkeit, es zu brechen (vorzugsweise ohne Backslashes)?
python
coding-style
pep8
Juliusz Gonera
quelle
quelle
foo.set_default('bar', {}).set_default('spam', {}).set_default('eggs', {})['lol'] = 'yeah'
Dies ist ein Fall, in dem ein Zeilenfortsetzungszeichen dem Öffnen von Klammern vorgezogen wird. Die Notwendigkeit dieses Stils wird offensichtlicher, wenn Methodennamen länger werden und Methoden Argumente annehmen:
PEP 8 soll mit einem Maß an gesundem Menschenverstand und einem Auge für das Praktische und das Schöne interpretiert werden. Verstößt glücklich gegen eine PEP 8-Richtlinie, die zu hässlichem oder schwer lesbarem Code führt.
Wenn Sie jedoch häufig mit PEP 8 nicht einverstanden sind, kann dies ein Zeichen dafür sein, dass es Lesbarkeitsprobleme gibt, die über Ihre Wahl des Leerzeichens hinausgehen :-)
quelle
.filter
Aufrufe ist, dass Sie bei einem Wechselsubkeyword
zusub_keyword
jetzt die Einrückung jeder einzelnen Zeile korrigieren müssen , nur weil Sie den Variablennamen geändert haben. Nicht gut, wenn Stil tatsächlich die Wartbarkeit behindert ...Meine persönliche Wahl wäre:
quelle
Speichern Sie einfach das Zwischenergebnis / Objekt und rufen Sie die nächste Methode auf, z
quelle
team_members = soup.find(class_='section team').find_all('ul').find_all('li')
, entspricht der Rückgabewert jedes.find(...)
Aufrufs noch nicht der Bedeutung vonteam_members
.section = soup.find(class_='section team')
undteam_members = section.find_all('ul').find_all('li')
.Laut Python-Sprachreferenz
können Sie einen Backslash verwenden.
Oder einfach brechen. Wenn eine Klammer nicht gepaart ist, behandelt Python dies nicht als Zeile. Und unter solchen Umständen spielt das Einrücken der folgenden Zeilen keine Rolle.
quelle
Es ist eine etwas andere Lösung als die von anderen, aber ein Favorit von mir, da es manchmal zu raffinierten Metaprogrammierungen führt.
Dies ist eine gute Technik zum Erstellen von Suchvorgängen. Gehen Sie eine Liste der Bedingungen durch, die Sie aus Ihrem komplexen Abfrageformular abrufen möchten (oder auf Zeichenfolgen basierende Abzüge darüber, wonach der Benutzer sucht), und lösen Sie dann einfach das Wörterbuch in den Filter auf.
quelle
Sie scheinen SQLAlchemy zu verwenden. Wenn dies zutrifft, verwendet die
sqlalchemy.orm.query.Query.filter_by()
Methode mehrere Schlüsselwortargumente, sodass Sie wie folgt schreiben können:Aber es wäre besser:
quelle
Ich möchte die Argumente um zwei Blöcke und die Anweisung um einen Block wie folgt einrücken:
quelle