De nombreux langages de programmation, y compris Python, font une distinction entre les instructions et les expressions. Je vais donner les détails aux autres (car je ne connais pas très bien la langue), mais très grossièrement.
On peut le dire.
Si vous n'avez pas envie d'écrire votre code court, vous pouvez faire l'un ou l'autre, mais pour l'écrire court, il vaut mieux avoir autant d'expressions que possible, en en poussant autant dans une seule expression.
D'un autre côté, si vous faites de tout une expression, vous pouvez facilement écrire du code compliqué et étrange, et je déteste ça dans certaines langues.
Python est un langage qui ne l'aime pas, par exemple les affectations sont des instructions plutôt que des expressions. Vous ne pouvez donc pas écrire de code comme ʻa = (b = 1) + (c = 2) . Il n'y a pas d'expression telle que ʻa = i ++
. Les fonctions peuvent également être créées avec des expressions lambda, mais les instructions ne peuvent pas être écrites dans des expressions lambda, et seules les fonctions qui peuvent être exprimées avec une seule expression peuvent être créées. L'idée est que si vous voulez créer une fonction aussi compliquée, définissez-la correctement avec def hogehoge ():
.
Il y a beaucoup de. Environ 2 cas.
python
try:
process(dic[key])
except KeyError:
process(None)
python
try:
process(int(s))
except ValueError:
process(0)
La référence de dictionnaire de 1 peut être réécrite avec if.
if key in dic:
process(dic[key])
else:
process(None)
Il peut également être écrit comme une expression à l'aide de l'opérateur ternaire.
process(dic[key] if key in dic else None)
Si vous souhaitez effectuer une conversion int de la chaîne de caractères de 2, elle peut être réécrite avec if.
process(int(s) if s[0] in '-0123456789' and all(c in '0123456789' for c in s) else 0)
Mais faites-vous cela? Je me sens. Ce serait encore plus ennuyeux si c'était un float plutôt qu'un int.
Par conséquent, un PEP a été proposé en mars 2014 pour ajouter une expression d'exception. http://legacy.python.org/dev/peps/pep-0463/
lst = [1, 2]
value = (lst[2] except IndexError: "No value")
Ouaip. C'est facile à comprendre. Avec cela, conversion int des chaînes de caractères
process(int(s) except IndexError: 0)
Peut être écrit simplement.
Cependant, Guido, le créateur de Python, a déclaré qu'à partir de mars 2014, le PEP était bien étudié et la grammaire bien développée, mais la proposition elle-même serait rejetée. https://mail.python.org/pipermail/python-dev/2014-March/133118.html
But the thing I can't get behind are the motivation and rationale. I don't think that e.g. dict.get() would be unnecessary once we have except expressions, and I disagree with the position that EAFP is better than LBYL, or "generally recommended" by Python.
(Traduction diverse) Mais ce avec quoi je ne suis pas d'accord, c'est le motif et la justification. Par exemple, je ne pense pas que dict.get était inutile s'il y avait une expression except. Je ne suis pas non plus d'accord avec l'idée que EAFP (\ * 1) est meilleur que LBYL (\ * 2) ou est "généralement recommandé" en Python.
(\ * 1) Il est plus facile de demander pardon que la permission (il est plus facile de demander la permission que d'obtenir la permission). En d'autres termes, comme la syntaxe try-except, si vous essayez et échouez, prenez une autre méthode. (\ * 2) Regardez avant de sauter: La canne qui ne tombe pas, c'est-à-dire, assurez-vous qu'elle n'échoue pas à l'avance avant de le faire.
Je pense que ce serait pratique de l'avoir. Après tout, n'est-il pas adopté?
Recommended Posts