Include a part about dictionaries

This commit is contained in:
Fred Pauchet 2022-12-06 16:05:35 +01:00
parent 7aef6eebd7
commit a439c57757
1 changed files with 57 additions and 0 deletions

View File

@ -122,6 +122,63 @@ Il suffit dès lors de réaliser la soustraction matricielle entre deux objets d
En fait, l'intérêt concerne surtout la représentation de nos modèles, puisque chaque classe du modèle est représentée par la définition d'un objet Python.
Nous pouvons donc utiliser ces mêmes \textbf{dunder methods} (\textbf{double-underscores methods}) pour étoffer les protocoles du langage.
\section{Structures de données}
Les principales structures de données sont :
\begin{itemize}
\item Les listes (y inclus les tableaux) et tuples
\item Les dictionnaires (y inclus les \texttt{maps})
\item Les \textit{namedtuples} et \textit{dataclasses}
\item Les classes
\end{itemize}
\subsection{Dictionnaires}
Dans le langage Python, un dictionnaire est un objet.
Cela signifie qu'il ne se limite pas à modéliser une structure de données, mais qu'il embarque son propre comportement, avec ses méthodes.
Au hasard des internets multimédias, on est tombé sur un morceau de code à base de \texttt{pop} et de réinitialisation.
Quelque chose comme ceci:
\begin{minted}{python}
width = OPT_CMD_ARGS.pop(width_arg_name)
heigth = OPT_CMD_ARGS.pop(heigth_arg_name)
args_list.append(width)
args_list.append(heigth)
OPT_CMD_ARGS[width_arg_name] = width
OPT_CMD_ARGS[heigth_arg_name] = heigth
\end{minted}
Techniquement, un dictionnaire est mutable et peut donc être modifié.
Dans ce cas-ci, le dictionnaire sert à récupérer l'association entre un nom de paramètre et sa valeur pour la ligne de commande.
Le `pop` est donc utilisé uniquement pour récupérer une valeur: dans ce cas, il est possible d'utiliser la méthode `get`, qui permettra de définir une valeur par défaut:
\begin{minted}{python}
>>> canevas = dict() # on aurait aussi pu déclarer le dictionnaire avec canevas = {}
>>> canevas["a"] # avec un accès direct, si la clé n'existe pas, une exception est levée
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
>>> canevas.get("a", "abracadabra") # par contre, si on utilise get, aucune exception n'est levée
'abracadabra'
>>> canevas
{}
\end{minted}
Y'a une méthode du fieu de dieu: `setdefault` !
en gros, ça te retourne la valeur de la clé si elle existe, et si pas, cela te crée une nouvelle clé et te la retourne:
\begin{minted}{python}
>>> d = {}
>>> d.setdefault(1, "Yolo")
'Yolo'
>>> d
{1: 'Yolo'}
\end{minted}
Ca évite, dans une boucle, de vérifier si la clé existe déjà, et si pas, de la créer
\section{The Zen of Python}
(aussi connue sous PEP20 ;)) \index{PEP!PEP20}