Itérable
Un objet sur lequel on peut itérer, capable de renvoyer ses éléments un à un.
- Objet de type séquence :
list,str,tuple, … - Objet de type mapping :
dict, … - Classse ayant une mĂ©thode
__iter__()ou__get_item__()
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 :
__iter__(): retourne l’objet itĂ©rateur lui mĂȘme (chaque itĂ©rateur est donc un itĂ©rable)__next__(): retourne successivement les objets du flux- lĂšve l’exception
StopIterationlorsque plus aucune donnĂ©e n’est disponible
- lĂšve l’exception
>>> 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 fonctioniter()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 :
- subscriptable (
str,list,tuple,dict, …) - non subscriptable (
set,frozenset, …)
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) :
- les indexables : peut ĂȘtre indexĂ© avec des nombres entiers
- les sliceables : peut ĂȘtre indexĂ© avec des
slice
Séquence
Une séquence est un conteneur qui est indexables et sliceables.
- ItĂ©rable qui supporte l’accĂšs Ă un Ă©lĂ©ment en utilisant un entier comme indice
- Itérable qui définit la méthode
__len__()qui retourne la taille de la séquence
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 :
- d’accĂ©der Ă un Ă©lĂ©ment de l’objet (
__getitem__) - de modifier un Ă©lĂ©ment si l’objet est mutable (
__setitem__) - de supprimer un Ă©lĂ©ment si l’objet est mutable (
__delitem__)
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
- https://docs.python.org/fr/3/glossary.html#term-iterable
- https://docs.python.org/fr/3/glossary.html#term-iterator
- https://docs.python.org/3/library/collections.abc.html
- https://www.geeksforgeeks.org/python-difference-iterable-iterator/
- https://zestedesavoir.com/tutoriels/954/notions-de-python-avancees/1-starters/1-containers/