Comment écrire l'expression plus courte: ou p> merci! p> p> P>
5 Réponses :
L'expression Si calculant
plus longtemps si: ... code > Alternative. P>
en supposant que vous êtes en 2.5 en avant.
@Gregg: J'espère que c'est le cas - sinon vous utilisez 2,4 ou plus tôt, ce qui signifie que votre version de Python a au moins 6 ans!
Vérifiez Centos5 et d'autres distributions de serveur, John. Il y a encore beaucoup de 2,4 dans la nature sauvage, Ugh!
Merci à tous! Ma question ressemble à stupide, désolé, je sais. J'essaie juste d'apprendre et d'utiliser des idiomes Python.
Si vous utilisez utilisez déjà Il y a Autres façons mais ils souffrent de lisibilité. P> V si C STRY U code> Vous utilisez déjà l'opérateur ternaire le plus lisible et le plus efficace. P>
J'utiliserais des supports pour rendre l'expression plus lisible: Quand je l'ai vu pour la première fois, je l'ai lu comme p> try:
return "%.0f" % float_var
except TypeError:
return None
@Dave, surtout bon, bien que cette dernière note de dernière lettre indique que "%. 0f"% faux code> retournerait
"0" code>, ce qui pourrait être indésirable.
@Peter - Bon point, j'ai oublié la conversion automatique de True / Faux à 1/0.
Le typecheck pour float code> est toujours un signe d'avertissement. Si les deux classes de valeurs attendues sont des chiffres et
Aucun code>, il est beaucoup plus logique de vérifier
n'est pas Aucun code> que
isinstance (foo, float) code >, étant donné que le premier permet toujours à l'opération d'être dactylographié.
Ce n'est pas clair ce que vous voulez faire exactement. p>
L'interprétation la plus littérale aurait-il fonctionné comme celle-ci p>
>>> float_var = 4.5 >>> '%.0f' % float_var if float_var else float_var '5' # This is a string >>> float_var = 0.0 >>> '%.0f' % float_var if float_var else float_var 0.0 # This is a float
Je suppose que vous souhaitez rechercher Si cela est em> ce que vous avez voulu, je vous suggère de réviser votre modèle. Appagation des erreurs en retournant à plusieurs reprises plus court n'est pas toujours meilleur. Vos extraits ne sont pas douloureusement longs ni maladroits. En fait, vous voudrez les faire un peu plus longtemps em> si vous les utilisez pour éviter un bogue potentiel. P>
Aucun code> avec "
si float_var code>"? Si tel est le cas, vous l'épelez toujours "
si foo n'est pas Aucun code>", pas "
si foo code>", le premier étant plus clair et moins sujette de bogue. P>
Aucun code> est une mauvaise chose: il est laid et le bug-suone et non idiomatique. Utilisez à la place des exceptions. P> li>
ol> li>
ou code> pour cela. Cependant, cela rend le code plus difficile à lire et ne vous permet pas de spécifier entre
Aucun code> et d'autres fausses valeurs, ce qui conduit souvent à des bugs. LI>
ul> li>
ul>
float_var and "%.0f" % float_vav Isn't it awesome?
Nope: >>> f = 0,0 >>> x = f et "% F"% F >>> type (x)
J'ai des sentiments mitigés à ce sujet. C'est un peu génial. Pour autant que je sache, il est logiquement équivalent à '% .0f'% float_var si float_var sinon float_var mais je ne l'utiliserais pas dans mon code. Je pense qu'il est difficile de lire. Peut-être que ce n'est que parce que cette astuce n'est pas idiomatique à Python et je ne l'ai jamais vue auparavant. Non, non, non, je n'écrirai jamais comme ça! Mais je suis impressionné.
"Plus court"? Votre premier exemple est évidemment "plus court". Pourquoi demandez-vous qui est plus courte? Demandez-vous un troisième exemple qui est par magie encore plus court? Étant donné que votre question montre qui est plus courte, ce n'est pas clair ce que vous devez savoir.
Les deux exemples ne sont même pas le même code. Mis à part de l'évidence (on pré-pré-calculer "formated_string" de manière inverse de la mode), le second retourne
Aucun code> où le premier retour
float_var code>, qui pourrait être
Aucun code> ou
FALSE code> ou
0.0 code> ou quelques autres choses ... qui évoquent ces choses quand même?
@Peter Hansen: bonne question. Je ne peux même pas interpréter la question et il a déjà eu des upvotes. Je souhaite que les UPVOTERS quittent des commentaires "+1 ..." sur la raison pour laquelle la question est si cool.
@Peter Hansen, @s. Lott: interpréter les questions sur Stackoverflow est plus un art qu'une science. Pour ma réponse ci-dessous, j'ai interprété celui-ci à dire: "Je sais deux façons d'écrire une condition ternaire if-sinon. Y a-t-il une manière plus courte? Quand devrais-je utiliser l'un ou l'autre?"