L'objet None en Python
L'objet None
est l'une des caractéristiques les plus importantes de Python.
Il est utilisé pour représenter la valeur d'une variable qui ne contient rien, ou qui n'a pas été initialisée.
Dans cet article, nous allons comprendre son utilité et son fonctionnement.
Définition et utilité de l'objet None
L'objet None
est défini comme la représentation de l'absence de valeur.
L'objet None est également utilisé pour signifier l'achèvement d'une fonction sans retour.
def foo():
a = 5
resultat = foo()
print(resultat) # None
Vous remarquerez que même si nous n'utilisons pas l'instruction return
, la fonction retourne par défaut la valeur None
.
Le type de l'objet None
À l'inverse de la plupart des objets en Python, l'objet None
est une instance de la classe NoneType
et non de la classe object
.
En effet, None
est un singleton, c'est-à-dire qu'il n'existe qu'une seule et unique instance de la classe NoneType
.
Petite explication avec du code :
>>> a = None
>>> b = None
>>> print(id(a))
4534110080
>>> print(id(b))
4534110080 # L'identifiant de b est identique à a
Comparaisons avec l'objet None
Il est important de comprendre que l'objet None
n'est pas équivalent à zéro, à une chaîne vide ou à une liste vide.
En effet, None
est une valeur spéciale qui représente l'absence de valeur, alors que zéro, une chaîne vide ou une liste vide ont des significations spécifiques.
x = None
y = 0
z = ""
if x == y:
print("x est égal à y")
else:
print("x n'est pas égal à y")
if x == z:
print("x est égal à z")
else:
print("x n'est pas égal à z")
Le programme va afficher :
"x n'est pas égal à y"
"x n'est pas égal à z"
De même, il est important de comprendre que None
n'est pas égal à False
mais que si vous utilisez None
dans une expression booléenne, elle se comportera comme False
.
N'hésitez pas à relire cette phrase une deuxième fois 😄
Un exemple de code sera probablement plus facile à comprendre :
x = None
if x: # équivalent de "if bool(None):"
print("x est True")
else:
print("x est False")
if x == False:
print("x est égal à False")
else:
print("x n'est pas égal à False")
if x is None:
print("x est définie à None")
else:
print("x n'est pas None")
Dans la première structure conditionnelle, l'interprétation booléenne de None
est égale à False
:
print(bool(None)) # False
C'est pour cette raison que if x
n'est pas vérifié et qu'on affiche "x est False".
Cependant, on se rend bien compte quand on utilise l'opérateur d'égalité (==
) que la variable x
n'est pas égale à False
.
Dans le cas de la troisième structure conditionnelle, en utilisant l'opérateur is
, Python nous indique bien que la variable x
représente l'objet None
.