Puis-je utiliser:
if A:
au lieu de
if A is not None:
Ce dernier semble si prolixe. Y a-t-il une différence?
Puis-je utiliser:
if A:
au lieu de
if A is not None:
Ce dernier semble si prolixe. Y a-t-il une différence?
La déclaration
if A:
appellera A.__nonzero__()
(voir méthode Spéciale noms de la documentation) et utiliser la valeur de retour de cette fonction. Voici le résumé:
object.__nonzero__(self)
Appelés à mettre en œuvre vérité le test de la valeur et de l'exploitation intégré
bool()
; doit renvoyerFalse
ouTrue
, ou leur entier équivalents0
ou1
. Lorsque cette méthode n'est pas définie,__len__()
est appelée, si elle est définie, et l'objet est considérée comme vraie si son résultat est différent de zéro. Si une classe ne définit ni__len__()
ni__nonzero__()
, toutes ses instances sont considérées comme de vraies.
D'autre part,
if A is not None:
compare uniquement la référence A
avec None
pour voir si elle est la même ou pas.
Comme écrit dans la PEP8:
Comparaisons des singletons comme Aucun devrait toujours être fait avec "est" ou "n'est pas", ne jamais les opérateurs d'égalité.
Aussi, méfiez-vous de l'écriture de "si x" lorsque vous vraiment dire "si x n'est pas Rien" -- par exemple, lors de l'essai de savoir si une variable ou d'un argument dont la valeur par défaut Aucun n'a été défini sur une autre valeur. L'autre valeur que peut avoir un type de (comme un conteneur) qui pourraient être faux dans un contexte booléen!
Beaucoup de retour des fonctions Aucune si il n'y a pas des résultats pertinents. Par exemple, un SQLAlchemy requête .first()
méthode renvoie None s'il n'y avait pas de lignes dans le résultat. Supposons que vous soyez en sélectionnant une valeur qui peut retourner la valeur 0, et ont besoin de savoir si c'est en fait 0 ou si la requête a pas de résultats à tous.
Un idiome commun est de donner une fonction ou une méthode de l'argument facultatif, la valeur par défaut, Aucun, et puis pour tester la valeur None pour voir si elle a été spécifiée. Par exemple:
def spam(eggs=None):
if eggs is None:
eggs = retrievefromconfigfile()
comparez-la à:
def spam(eggs=None):
if not eggs:
eggs = retrievefromconfigfile()
Dans ce dernier, ce qui se passe si vous appelez spam(0)
ou spam([])
? La fonction (à tort) de détecter que vous n'aviez pas passé à une valeur de eggs
et calcule une valeur par défaut pour vous. Ce n'est probablement pas ce que vous voulez.
Ou imaginez une méthode comme "retour à la liste des transactions pour un compte donné". Si le compte n'existe pas, il pourrait retourner Aucun. C'est différent que de retourner une liste vide (ce qui voudrait dire "ce compte existe mais n'a pas enregistré des transactions).
Enfin, de retour à la base de données des trucs. Il y a une grosse différence entre la valeur NULL et une chaîne vide. Une chaîne vide est généralement dit "il y a une valeur, et cette valeur n'est rien du tout". NULL dit "cette valeur n'a pas été saisi."
Dans chacun de ces cas, vous voulez les utiliser if A is None
. Vous êtes à la recherche d'une valeur spécifique - Aucun - pas seulement "quelque valeur que ce qui arrive à lancer pour de Faux".
La plupart des guides que j'ai vus suggèrent que vous devriez utiliser
si un:
sauf si vous avez une raison d'être plus spécifique.
Il y a quelques légères différences. Il existe des valeurs autres que Aucune qui renvoient la valeur False, par exemple des listes vides, ou 0. Réfléchissez donc à ce que vous testez réellement.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.