Improve Python chapter with introspection

This commit is contained in:
Fred Pauchet 2022-12-06 16:12:41 +01:00
parent a439c57757
commit 71b4c7a7fd
1 changed files with 37 additions and 3 deletions

View File

@ -124,6 +124,9 @@ Nous pouvons donc utiliser ces mêmes \textbf{dunder methods} (\textbf{double-un
\section{Structures de données}
Le langage Python est un langage orienté objet au sens où \textbf{tout} 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.
Les principales structures de données sont :
\begin{itemize}
@ -135,9 +138,6 @@ Les principales structures de données sont :
\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:
@ -179,6 +179,40 @@ en gros, ça te retourne la valeur de la clé si elle existe, et si pas, cela te
Ca évite, dans une boucle, de vérifier si la clé existe déjà, et si pas, de la créer
\section{Introspection}
\begin{minted}{python}
def on_command_1():
print("Oune")
def on_command_2():
print("Dos")
def on_command_3():
print("Tresse")
def prrrt():
print("Won't be printed")
\end{minted}
Tu peux retrouver les trois méthodes \texttt{on\_command\_*}` via la fonction `dir()`:
\begin{minted}{python}
>>> import module_chelou
>>> dir(module_chelou)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'on_command_1', 'on_command_2', 'on_command_3', 'prrrt']
>>> for function_name in [x for x in dir(module_chelou) if "on_command_" in x]:
... getattr(module_chelou, function_name)()
...
Oune
Dos
Tresse
```
\end{minted}
\section{The Zen of Python}
(aussi connue sous PEP20 ;)) \index{PEP!PEP20}