Kevin Meas

Just a random

Home Notes

đŸ‡«đŸ‡· Les conteneurs avec 🐍

Itérable

Un objet sur lequel on peut itérer, capable de renvoyer ses éléments un à un.

Lorsqu’un itĂ©rable est passĂ© comme argument Ă  la fonction native iter(), celle-ci fournit en retour un itĂ©rateur sur cet itĂ©rable.

>>> l = [1, 2, 3]
>>> from collections.abc import Iterable
>>> isinstance(l, Iterable)
True
>>> iterator = iter(l)
>>> iterator
<list_iterator object at 0x1091aa110>

Itérateur

Objet qui représente un flux de données, il doit implémenter les méthodes suivantes :

>>> l = [1, 2, 3]
>>> iterator = iter(l)
>>> next(iterator)
1
>>> next(iterator)
2
>>> next(iterator)
3
>>> next(iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Un objet conteneur, (tel que list) produit un nouvel itĂ©rateur neuf Ă  chaque fois qu’il est passĂ© Ă  la fonction iter() ou s’il est utilisĂ© dans une boucle for. Faire ceci sur un itĂ©rateur donnerait simplement le mĂȘme objet itĂ©rateur Ă©puisĂ© utilisĂ© dans son itĂ©ration prĂ©cĂ©dente, le faisant ressembler Ă  un conteneur vide.

>>> l = [1, 2, 3]
>>> iter(l)
<list_iterator object at 0x1091aa110>
>>> iter(l)
<list_iterator object at 0x1091aa050>

Conteneur

Objet ayant pour vocation Ă  contenir d’autres objets (str, list, tuple, dict, …).

Doit dĂ©finir la mĂ©thode __contains__(), afin d’utiliser l’opĂ©rateur in.

>>> 'a' in 'abc'
True
>>> 'abc'.__contains__('a')
True

Il existe deux type de conteneurs :

Un conteneur dit subscriptable concerne tous les objets sur lesquels l’opĂ©rateur [] peut ĂȘtre utilisĂ©, c’est Ă  dire n’importe quel objet qui implĂ©mente la mĂ©thode __getitem__().

a[1]
# pareil que
a.__getitem__(1)

2 catégories de subscriptables (non exclusif) :

Séquence

Une séquence est un conteneur qui est indexables et sliceables.

Ex : str, list, tuple, range, binary data, dict (mais considéré comme un mapping)

Hérite de Mét. abstraites Méth. mixin
Reversible, Collection __get_item__, __len__ __contains__, __iter__, __reversed__, index, count

Mapping

Un mapping est un conteneur qui associe des clefs Ă  des valeurs.

Hérite de Mét. abstraites Méth. mixin
Collection __get_item__, __len__, __iter__ __contains__, keys, items, values, get, __eq__, __ne__

Les objets indexeables

L’opĂ©rateur [] permet :

Dans la stdlib, les listes, les chaĂźnes de caractĂšres, les tuples et les dictionnaires sont indexables mais pas les sets.

Les objets sliceable

Un sliceable est souvent indexable, mais l’inverse n’est pas forcĂ©ment vrai. Dans la stdlib, les listes, les strings et les tuples sont sliceables, mais pas les dictionnaires ni les sets

Ressources