Sont une ligne de " si " / "pour" -déclarations de bonnes Python style?
Chaque tellement souvent ici je vois quelqu'un de code et ce qui semble être un "one-liner", que d'être un ligne d'instruction qui effectue de la façon standard d'un traditionnel déclaration " if " ou "pour" boucle fonctionne.
J'ai googlé autour et ne peut pas vraiment trouver ce type de celles que vous pouvez effectuer? Quelqu'un peut-il conseiller et de préférence, en donner quelques exemples?
Par exemple, pourrais-je le faire en une seule ligne:
example = "example"
if "exam" in example:
print "yes!"
Ou:
for a in someList:
list.append(splitColon.split(a))
- Pas sûr de ce que vous cherchez ... pouvez-vous expliquer un peu plus?
- Ne pas Python ont ces étranges lambda machines de nos jours et qui vous permettent de mettre un ensemble beaucoup plus sur une ligne? Non pas que je vais jamais les utiliser, bien sûr. Je préfère l'ancienne façon de faire les choses 🙂
- je n'ai pas regardé dans les lambda encore. chaque fois que je vois ce mot dans une question ici, j'ai vite cliquez sur un signet!
- Je pense qu'elle/il est en se référant à des interprétations de la liste.
- au début, je pensais aussi OP demandait interprétations de la liste, mais sur une inspection plus minutieuse ils que signifiait "soit one-liner si-déclarations ou de déclarations"
Vous devez vous connecter pour publier un commentaire.
Bien,
Est-ce une amélioration? Pas. Vous pouvez même ajouter des instructions du corps de la
if
de la clause en les séparant par un point-virgule. Je recommande contre que, bien que.J'ai constaté que dans la majorité des cas, faire bloc clauses sur une ligne est une mauvaise idée.
Il sera, à nouveau comme une généralité, de réduire la qualité de la forme du code. De haute qualité forme de code est un élément clé pour le langage python.
Dans certains cas, python offrent des moyens todo choses sur une seule ligne qui sont certainement plus pythonic. Des choses telles que ce que Nick d'mentionné à la compréhension de liste:
bien que, sauf si vous avez besoin d'une réutilisables liste plus précisément, vous pouvez envisager d'utiliser un générateur au lieu
note la plus grande différence entre les deux est que vous ne pouvez pas réitérer sur un générateur, mais il est plus efficace à utiliser.
Il est également construit dans l'opérateur ternaire dans les versions modernes de python qui vous permettent de faire des choses comme
ou
Certaines personnes peuvent trouver ces plus lisible et utilisable de la même
if (condition):
bloc.Quand il descend à lui, c'est à propos de style de code et ce qui est la norme avec l'équipe, vous travaillez sur. C'est le plus important, mais en général, je déconseillerais d'une ligne de blocs que la forme du code en python est très important.
logging.info("Found %d %s", num_results, "result" if num_results == 1 else "results")
.<condition> ? <true value> : <false value>
semblent assez archaïque.Plus généralement, tous les éléments suivants sont valides du point de vue syntaxique:
...etc.
un exemple de langue, une fonctionnalité qui n'est pas seulement la suppression des sauts de ligne, bien que toujours pas convaincu que c'est plus clair que la version plus détaillée
Vous pouvez réécrire le ci-dessus que:
list
et dans le deuxième vous utiliseznewlist
. Est-il une raison pour le changement?Python vous permet de placer le retrait de la clause sur la même ligne si c'est une seule ligne:
Les anciennes versions de Python ne donnerait lieu qu'à une simple déclaration après
for ...:
if ...:
ou similaire bloc des déclarations liminaires.Je vois que l'on peut avoir de multiples déclarations simples sur la même ligne que l'un de ces. Cependant, il existe différentes combinaisons qui ne fonctionnent pas. Par exemple, nous pouvons:
... mais, d'autre part, nous ne pouvons pas:
Nous pouvons:
... mais nous ne pouvons pas:
... et ainsi de suite.
En tout cas, tous ces éléments sont considérés comme extrêmement NON-pythonic. Si vous écrivez du code comme celui-ci l'expérience Pythoneux sera probablement prendre un peu de vos compétences.
C'est marginalement acceptable de combiner plusieurs instructions sur une ligne dans certains cas. Par exemple:
... ou encore:
... pour la simple
break
continue
et mêmereturn
des déclarations ou des assignations.En particulier si l'on a besoin d'utiliser une série de
elif
on peut utiliser quelque chose comme:... alors que vous pourriez ne pas irriter vos collègues de trop. (Cependant, les chaînes de
elif
comme ça hurler pour être reconstruit dans une dépêche de la table ... un dictionnaire qui pourrait ressembler à:Vous pourriez faire tout cela en une seule ligne par l'omission de la
example
variable:Plonger dans python a un peu où il parle de ce qu'il appelle la et-ou de truc, ce qui semble être un moyen efficace pour se fourrer une logique complexe en une seule ligne.
Fondamentalement, il simule l'opérateur ternaire en c, en vous donnant un moyen de tester la vérité et de retourner une valeur basée sur le fait que. Par exemple:
1 ? 0 : 2
est égal à0
, mais1 and 0 or 2
est égal à2
. Il est beaucoup plus sûr d'utiliser une autre construction qui est faite précisément pour cette raison:0 if 1 else 2
(qui est rendement0
).0
évalue àFalse
. La raison que votre code t travail, c'est parce que"firstvalue"
évalue àTrue
.)Ceci est un exemple de "if else" avec des actions.