:PROPERTIES:
:ID:       234f4590-b484-4286-9dbd-49612f4657be
:mtime:    20220522171851
:ctime:    20220522151020
:END:
#+title: NamedTuple

* Introduction
Les /tuples/ sont des objets /immutables/ contenant des données /mutable/ ou non, homogènes ou non. Le contenu d'un
/tuple/ est accessible depuis son index (cf. tableau). Le /namedtuple/ est un /tuple/ pour lequel le contenu est aussi
accessible depuis un nom, rendant le code plus lisible.

Les /namedtuple/ prennent la même quantité de RAM que les /tuple/.

* Howto
Le module /collections/ propose une implémentation de /namedtuple/ :
#+BEGIN_SRC  python :results output
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
#+END_SRC

#+BEGIN_SRC python :results output
from collections import namedtuple
from sys import getsizeof

Point = namedtuple('Point', ['x', 'y'])
p1 = Point(10, 20)

print(f'{p1=}')
print(f'{p1.x == p1[0] = }')
print(f'{p1.y == p1[1] = }')

print(f'{getsizeof(p1) == getsizeof((10, 20)) = }')
#+END_SRC

#+RESULTS:
: p1=Point(x=10, y=20)
: p1.x == p1[0] = True
: p1.y == p1[1] = True
: getsizeof(p1) == getsizeof((10, 20)) = True

* Références
 * [[https://pythonsimplified.com/what-are-namedtuples-in-python/][What are the named tuples in Python - Python Simplified]]
 * [[https://docs.python.org/3/library/collections.html#collections.namedtuple][Namedtuple - Python collections module]]
