Comment rompre une ligne de enchaînés méthodes en Python?
J'ai une ligne de code suivant (ne les blâme pas pour les conventions de nommage, ils ne sont pas la mienne):
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()
Je n'aime pas à quoi il ressemble (pas trop lisible) mais je n'ai pas de meilleure idée de limiter le nombre de lignes à 79 caractères dans cette situation. Est-il une meilleure façon de le casser (de préférence sans barre oblique inverse)?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser parenthèse supplémentaire:
foo.set_default('bar', {}).set_default('spam', {}).set_default('eggs', {})['lol'] = 'yeah'
C'est un cas où un caractère de continuation de ligne est préféré ouvrir des parenthèses. La nécessité de ce style devient de plus en plus évident que les noms de méthode plus longtemps et que les méthodes de commencer à prendre des arguments:
PEP 8 est conçu pour être interprété avec une mesure de bon sens et un oeil pour la pratique et le beau. Heureusement violer toute la PEP 8 ligne directrice que les résultats de laid ou dur à lire le code.
Cela étant dit, si vous avez souvent de vous trouver en désaccord avec PEP 8, il peut être un signe qu'il y a des raisons de lisibilité des enjeux qui transcendent votre choix d'espaces 🙂
.filter
appels est que si vous changezsubkeyword
àsub_keyword
, vous avez maintenant de fixer l'indentation de chaque ligne tout simplement parce que vous avez changé le nom de la variable. Pas bon quand le style fait entrave la maintenabilité...my_obj["long_keyword_name"].attrs["another_long_name"] = my_obj["long_keyword_name"].attrs["another_long_name"].replace("aaa", "bbb").replace("ccc", "ddd").replace("eee", "fff")
.Mon choix personnel serait:
Simplement pour stocker les résultats intermédiaires/objet et d'invoquer la méthode,
par exemple,
team_members = soup.find(class_='section team').find_all('ul').find_all('li')
, la valeur de retour de chaque.find(...)
appel ne rentre pas dans le sens deteam_members
encore.C'est un peu une solution différente de celle fournie par d'autres, mais un de mes préférés car il conduit à l'astucieux métaprogrammation parfois.
C'est une bonne technique pour la construction de recherches. Passer par une liste de conditions à la mine de la complexité de votre formulaire de requête (ou une chaîne basée sur des déductions au sujet de ce que l'utilisateur est à la recherche d'), puis il suffit de faire exploser le dictionnaire dans le filtre.
Selon Référence Au Langage Python
Vous pouvez utiliser une barre oblique inverse.
Ou tout simplement de le casser. Si un support n'est pas connecté, python ne sera pas traiter que comme une ligne. Et dans de telles circonstances, l'indentation des lignes suivantes n'a pas d'importance.
Vous semble à l'aide de SQLAlchemy, si c'est vrai,
sqlalchemy.orm.de la requête.De la requête.filter_by()
méthode prend plusieurs arguments mot-clé, de sorte que vous pouvez l'écrire comme:Mais il serait mieux:
J'aime tiret, les arguments avancés par les deux blocs, et la déclaration d'un bloc, comme celles-ci: