Include a part about dictionaries
This commit is contained in:
parent
7aef6eebd7
commit
a439c57757
|
@ -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}
|
||||||
|
|
Loading…
Reference in New Issue