Site de référence: [Introduction à Python] Comment déterminer l'authenticité avec l'instruction if (True et None)
J'utilise souvent des instructions if en python, mais j'aimerais expliquer les occasionnelles None. Dans l'instruction if, il y a une condition à comparer et il est déterminé si l'instruction de condition est True ou False. Aucun est un concept proche de False, et vous pouvez presque penser à False = None. La différence est que False a l'information qu'il est faux (0), tandis que None signifie qu'il n'y a pas de données là-bas »en premier lieu. Je pense que c'est difficile à comprendre à partir des seuls mots, alors j'aimerais donner un exemple concret.
Commençons par un exemple de True et False.
>>> a = 3
>>> if(a > 1):
... print "a > 1"
a > 1
C'est un programme qui affiche "a> 1" si la valeur a est supérieure à 1. Dans l'instruction if, la vérité d'un> 1 est jugée. Maintenant que nous avons un = 3, le verdict est vrai. Le fait est qu'il juge seulement si la sentence du jugement est vraie ou fausse, donc la même chose peut être faite comme suit.
>>> if(True):
... print "True"
...
True
>>> if(False):
... print "True"
... else:
... print "False"
...
False
De cette manière, il est décidé si l'énoncé de jugement est vrai ou faux, et à la fin, il est jugé comme 1 et 0 dans le programme (True = 1, False = 0).
Juste au cas où, assurons-nous que True = 1 et False = 0.
>>> print 1+True
2
>>> print 1+False
1
Comme vous pouvez le voir, True et False correspondent à 1 et à zéro.
Parlons maintenant de Aucun, qui est le sujet principal. Jugons l'instruction if de la même manière.
>>> print 1+True
2
>>> print 1+False
1
Jusqu'à présent, il semble que vous puissiez penser à False = None. Ensuite, ajoutons.
>>> print 1+None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
Hmmm, j'ai une erreur ici. Comme mentionné au début, None indique qu'il n'y a pas de données là-bas, donc il n'y a pas de concept de valeur. Par conséquent, vous pouvez voir qu'il est impossible d'ajouter les valeurs.
L’utilisation d’objets de type dictionnaire est un exemple d’apparition Aucun. Des exemples d'objets de type dictionnaire sont les suivants.
test = {"red":"apple","blue":"sky","green":"forest"}
En liant le rouge et la pomme, vous pouvez trouver la pomme en recherchant avec le mot-clé rouge. La fonction get est utile pour effectuer une recherche par mot-clé ici.
>>> print test.get("red")
apple
Maintenant, recherchons des mots (orange) qui ne sont pas enregistrés dans ce dictionnaire.
>>> print test.get("orange")
None
C'est là qu'aucun n'est entré. Comme vous pouvez le voir, None est utilisé pour indiquer des données inexistantes. Vous pouvez voir que la signification est un peu différente de False.
Au fait, il est possible d'accéder directement avec test [“keyword”], mais si vous utilisez un mot-clé qui n'existe pas, vous obtiendrez une KeyError comme indiqué ci-dessous.
>>> print test["orange"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'orange'
Si cela se produit, le programme que vous avez écrit sera interrompu de force au milieu, il est donc recommandé d'utiliser la fonction get qui ne se termine pas.
Lorsque vous utilisez la comparaison logique None, "is" ou "==" convient parfaitement.
>>> a = test.get("orange") #Ne mettez aucun dans un
>>> if (a == None): # ==Comparaison logique avec
... print "a == None"
a == None
>>> if (a is None): #Comparaison logique avec is
... print "a is None"
...
a is None
Les deux fonctionnent correctement. Pour le dire franchement, «est» est recommandé. Bien que ce soit un cas rare, il semble qu'une erreur puisse se produire avec "==" (bien que l'auteur ne l'ait pas encore rencontré). On dit également que "est" est plus rapide en termes de vitesse d'exécution. Le résultat de la mesure du temps de traitement à l'aide du module timeit pour la vérification est affiché.
>>> timeit.timeit("1 == None", number=10000000)
0.3263418674468994
Ce que cela signifie est "Il a fallu 0,33 seconde pour mesurer le temps nécessaire pour comparer" 1 == Aucun "10 000 000 fois."
De la même manière, essayez "1 is None".
>>> timeit.timeit("1 is None", number=10000000)
0.19225311279296875
Comme vous pouvez le voir sur ce résultat, le temps de traitement est d'environ 0,19 / 0,33 à 60% plus rapide lors de l'utilisation de is.