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. 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. 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} \section{The Zen of Python}
(aussi connue sous PEP20 ;)) \index{PEP!PEP20} (aussi connue sous PEP20 ;)) \index{PEP!PEP20}