J'ai une ligne du code suivant (ne blâmez pas les conventions de nommage, elles ne sont pas les miennes):
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 ça ressemble (pas trop lisible) mais je n'ai pas de meilleure idée de limiter les lignes à 79 caractères dans cette situation. Existe-t-il un meilleur moyen de le casser (de préférence sans contre-obliques)?
python
coding-style
pep8
Juliusz Gonera
la source
la source
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érable aux parenthèses ouvertes. La nécessité de ce style devient plus évidente à mesure que les noms de méthodes s'allongent et que les méthodes commencent à prendre des arguments:
La PEP 8 est destinée à être interprétée avec une mesure de bon sens et un œil à la fois pratique et beau. Violez heureusement toute directive PEP 8 qui entraîne un code laid ou difficile à lire.
Cela étant dit, si vous vous trouvez fréquemment en désaccord avec PEP 8, cela peut être un signe qu'il y a des problèmes de lisibilité qui transcendent votre choix d'espaces :-)
la source
.filter
appels est que si vous changezsubkeyword
ensub_keyword
, vous devez maintenant corriger l'indentation de chaque ligne simplement parce que vous avez changé le nom de la variable. Pas bon quand le style entrave la maintenabilité ...Mon choix personnel serait:
la source
Stockez simplement le résultat / objet intermédiaire et invoquez la méthode suivante dessus, par exemple
la source
team_members = soup.find(class_='section team').find_all('ul').find_all('li')
, la valeur de retour de chaque.find(...)
appel ne correspond pas encore à la signification deteam_members
.section = soup.find(class_='section team')
etteam_members = section.find_all('ul').find_all('li')
.Selon la référence du langage Python,
vous pouvez utiliser une barre oblique inverse.
Ou tout simplement le casser. Si un crochet n'est pas apparié, python ne le traitera pas comme une ligne. Et dans de telles circonstances, l'indentation des lignes suivantes n'a pas d'importance.
la source
C'est une solution un peu différente de celle fournie par d'autres, mais une de mes préférées car elle conduit parfois à une métaprogrammation astucieuse.
C'est une technique intéressante pour créer des recherches. Parcourez une liste de conditions à extraire à partir de votre formulaire de requête complexe (ou des déductions basées sur une chaîne sur ce que l'utilisateur recherche), puis éclatez simplement le dictionnaire dans le filtre.
la source
Vous semblez utiliser SQLAlchemy, si c'est vrai, la
sqlalchemy.orm.query.Query.filter_by()
méthode prend plusieurs arguments de mot-clé, vous pouvez donc écrire comme:Mais ce serait mieux:
la source
J'aime mettre en retrait les arguments de deux blocs et l'instruction d'un bloc, comme ceci:
la source