From 32e8fc9ada49f2d7d6f4b0c583fae2fde214a90b Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Mon, 28 Mar 2022 21:27:00 +0200 Subject: [PATCH] Continue switch to latex --- asciidoc-to-tex.tex | 673 --------------------- chapters/python.tex | 510 ++++++++++++++++ images/napoleon-module-level-docstring.png | Bin 0 -> 146881 bytes main.tex | 6 +- 4 files changed, 515 insertions(+), 674 deletions(-) create mode 100644 images/napoleon-module-level-docstring.png diff --git a/asciidoc-to-tex.tex b/asciidoc-to-tex.tex index 2f6f9be..60d6776 100644 --- a/asciidoc-to-tex.tex +++ b/asciidoc-to-tex.tex @@ -1436,693 +1436,20 @@ l'organigramme (ou le diagramme), et ceux qui changent souvent plus bas, dans le sens de stabilité du flux. Les composants les plus bas sont considérés comme volatiles -\hypertarget{_architecture}{% -\section{Architecture}\label{_architecture}} - - -\hypertarget{_politiques_et_ruxe8gles_muxe9tiers}{% -\subsection{Politiques et règles -métiers}\label{_politiques_et_ruxe8gles_muxe9tiers}} - -TODO: Un p'tit bout à ajouter sur les méthodes de conception ;) - -\hypertarget{_considuxe9ration_sur_les_frameworks}{% -\subsection{Considération sur les -frameworks}\label{_considuxe9ration_sur_les_frameworks}} - - - - - - - -\hypertarget{_un_point_sur_linversion_de_duxe9pendances}{% -\subsection{Un point sur l'inversion de -dépendances}\label{_un_point_sur_linversion_de_duxe9pendances}} - - - -\hypertarget{_tests_et_intuxe9gration}{% -\section{Tests et intégration}\label{_tests_et_intuxe9gration}} - -\begin{quote} -Tests are part of the system. You can think of tests as the outermost -circle in the architecture. Nothing within in the system depends on the -tests, and the tests always depend inward on the components of the -system~». - ---- Robert C. Martin Clean Architecture -\end{quote} - -\hypertarget{_le_langage_python}{% -\section{Le langage Python}\label{_le_langage_python}} - - - -Il fonctionne avec un système d'améliorations basées sur des -propositions: les PEP, ou "\textbf{Python Enhancement Proposal}". -Chacune d'entre elles doit être approuvée par le -\href{http://fr.wikipedia.org/wiki/Benevolent_Dictator_for_Life}{Benevolent -Dictator For Life}. - -Le langage Python utilise un typage dynamique appelé -\href{https://fr.wikipedia.org/wiki/Duck_typing}{\textbf{duck typing}}: -"\emph{When I see a bird that quacks like a duck, walks like a duck, has -feathers and webbed feet and associates with ducks --- I'm certainly -going to assume that he is a duck}" Source: -\href{http://en.wikipedia.org/wiki/Duck_test}{Wikipedia}. - -Les morceaux de code que vous trouverez ci-dessous seront développés -pour Python3.9+ et Django 3.2+. Ils nécessiteront peut-être quelques -adaptations pour fonctionner sur une version antérieure. - -\hypertarget{_eluxe9ments_de_langage}{% -\subsection{Eléments de langage}\label{_eluxe9ments_de_langage}} - -En fonction de votre niveau d'apprentissage du langage, plusieurs -ressources pourraient vous aider: - -\begin{itemize} -\item - \textbf{Pour les débutants}, - \href{https://automatetheboringstuff.com/}{Automate the Boring Stuff - with Python} cite:{[}boring\_stuff{]}, aka. \emph{Practical - Programming for Total Beginners} -\item - \textbf{Pour un (gros) niveau au dessus} et pour un état de l'art du - langage, nous ne pouvons que vous recommander le livre Expert Python - Programming cite:{[}expert\_python{]}, qui aborde énormément d'aspects - du langage en détails (mais pas toujours en profondeur): les - différents types d'interpréteurs, les éléments de langage avancés, - différents outils de productivité, métaprogrammation, optimisation de - code, programmation orientée évènements, multithreading et - concurrence, tests, \ldots\hspace{0pt} A ce jour, c'est le concentré - de sujets liés au langage le plus intéressant qui ait pu arriver entre - nos mains. -\end{itemize} - -En parallèle, si vous avez besoin d'un aide-mémoire ou d'une liste -exhaustive des types et structures de données du langage, référez-vous -au lien suivant: -\href{https://gto76.github.io/python-cheatsheet/}{Python Cheat Sheet}. - -\hypertarget{_protocoles_de_langage}{% -\subsubsection{Protocoles de langage}\label{_protocoles_de_langage}} - -dunder - -Le modèle de données du langage spécifie un ensemble de méthodes qui -peuvent être surchargées. Ces méthodes suivent une convention de nommage -et leur nom est toujours encadré par un double tiret souligné; d'où leur -nom de "\emph{dunder methods}" ou "\emph{double-underscore methods}". La -méthode la plus couramment utilisée est la méthode \texttt{init()}, qui -permet de surcharger l'initialisation d'une instance de classe. - -\begin{Shaded} -\begin{Highlighting}[] -\KeywordTok{class}\NormalTok{ CustomUserClass:} - \KeywordTok{def} \FunctionTok{\_\_init\_\_}\NormalTok{(}\VariableTok{self}\NormalTok{, initiatization\_argument):} -\NormalTok{ ...} -\end{Highlighting} -\end{Shaded} - -cite:{[}expert\_python(142-144){]} - -Ces méthodes, utilisées seules ou selon des combinaisons spécifiques, -constituent les \emph{protocoles de langage}. Une liste complètement des -\emph{dunder methods} peut être trouvée dans la section -\texttt{Data\ Model} de -\href{https://docs.python.org/3/reference/datamodel.html}{la -documentation du langage Python}. - -All operators are also exposed as ordinary functions in the operators -module. The documentation of that module gives a good overview of Python -operators. It can be found at -\url{https://docs.python.org/3.9/library/operator.html} - -If we say that an object implements a specific language protocol, it -means that it is compatible with a specific part of the Python language -syntax. - -The following is a table of the most common protocols within the Python -language. - -Protocol nameMethodsDescriptionCallable protocol\emph{call}()Allows -objects to be called with parentheses:instance()Descriptor -protocols\emph{set}(), \emph{get}(), and \emph{del}()Allows us to -manipulate the attribute access pattern of classes (see the Descriptors -section)Container protocol\emph{contains}()Allows us to test whether or -not an object contains some value using the in keyword:value in instance - -Python in Comparison with Other LanguagesIterable -protocol\emph{iter}()Allows objects to be iterated using the -forkeyword:for value in instance: \ldots\hspace{0pt}Sequence -protocol\emph{getitem}(),\emph{len}()Allows objects to be indexed with -square bracket syntax and queried for length using a built-in -function:item = instance{[}index{]}length = len(instance)Each operator -available in Python has its own protocol and operator overloading -happens by implementing the dunder methods of that protocol. Python -provides over 50 overloadable operators that can be divided into five -main groups:• Arithmetic operators • In-place assignment operators• -Comparison operators• Identity operators• Bitwise operatorsThat's a lot -of protocols so we won't discuss all of them here. We will instead take -a look at a practical example that will allow you to better understand -how to implement operator overloading on your own - -The \texttt{add()} method is responsible for overloading the \texttt{+} -(plus sign) operator and here it allows us to add two matrices together. -Only matrices of the same dimensions can be added together. This is a -fairly simple operation that involves adding all matrix elements one by -one to form a new matrix. - -The \texttt{sub()} method is responsible for overloading the \texttt{–} -(minus sign) operator that will be responsible for matrix subtraction. -To subtract two matrices, we use a similar technique as in the -- -operator: - -\begin{Shaded} -\begin{Highlighting}[] -\KeywordTok{def} \FunctionTok{\_\_sub\_\_}\NormalTok{(}\VariableTok{self}\NormalTok{, other):} - \ControlFlowTok{if}\NormalTok{ (}\BuiltInTok{len}\NormalTok{(}\VariableTok{self}\NormalTok{.rows) }\OperatorTok{!=} \BuiltInTok{len}\NormalTok{(other.rows) }\KeywordTok{or} \BuiltInTok{len}\NormalTok{(}\VariableTok{self}\NormalTok{.rows[}\DecValTok{0}\NormalTok{]) }\OperatorTok{!=} \BuiltInTok{len}\NormalTok{(other.rows[}\DecValTok{0}\NormalTok{])):} - \ControlFlowTok{raise} \PreprocessorTok{ValueError}\NormalTok{(}\StringTok{"Matrix dimensions don\textquotesingle{}t match"}\NormalTok{)} - \ControlFlowTok{return}\NormalTok{ Matrix([[a }\OperatorTok{{-}}\NormalTok{ b }\ControlFlowTok{for}\NormalTok{ a, b }\KeywordTok{in} \BuiltInTok{zip}\NormalTok{(a\_row, b\_row)] }\ControlFlowTok{for}\NormalTok{ a\_row, b\_row }\KeywordTok{in} \BuiltInTok{zip}\NormalTok{(}\VariableTok{self}\NormalTok{.rows, other.rows) ])} -\end{Highlighting} -\end{Shaded} - -And the following is the last method we add to our class: - -\begin{Shaded} -\begin{Highlighting}[] -\KeywordTok{def} \FunctionTok{\_\_mul\_\_}\NormalTok{(}\VariableTok{self}\NormalTok{, other):} - \ControlFlowTok{if} \KeywordTok{not} \BuiltInTok{isinstance}\NormalTok{(other, Matrix):} - \ControlFlowTok{raise} \PreprocessorTok{TypeError}\NormalTok{(}\SpecialStringTok{f"Don\textquotesingle{}t know how to multiply }\SpecialCharTok{\{}\BuiltInTok{type}\NormalTok{(other)}\SpecialCharTok{\}}\SpecialStringTok{ with Matrix"}\NormalTok{)} - - \ControlFlowTok{if} \BuiltInTok{len}\NormalTok{(}\VariableTok{self}\NormalTok{.rows[}\DecValTok{0}\NormalTok{]) }\OperatorTok{!=} \BuiltInTok{len}\NormalTok{(other.rows):} - \ControlFlowTok{raise} \PreprocessorTok{ValueError}\NormalTok{(}\StringTok{"Matrix dimensions don\textquotesingle{}t match"}\NormalTok{)} - -\NormalTok{ rows }\OperatorTok{=}\NormalTok{ [[}\DecValTok{0} \ControlFlowTok{for}\NormalTok{ \_ }\KeywordTok{in}\NormalTok{ other.rows[}\DecValTok{0}\NormalTok{]] }\ControlFlowTok{for}\NormalTok{ \_ }\KeywordTok{in} \VariableTok{self}\NormalTok{.rows]} - - \ControlFlowTok{for}\NormalTok{ i }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(}\BuiltInTok{len}\NormalTok{ (}\VariableTok{self}\NormalTok{.rows)):} - \ControlFlowTok{for}\NormalTok{ j }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(}\BuiltInTok{len}\NormalTok{ (other.rows[}\DecValTok{0}\NormalTok{])):} - \ControlFlowTok{for}\NormalTok{ k }\KeywordTok{in} \BuiltInTok{range}\NormalTok{(}\BuiltInTok{len}\NormalTok{ (other.rows)):} -\NormalTok{ rows[i][j] }\OperatorTok{+=} \VariableTok{self}\NormalTok{.rows[i][k] }\OperatorTok{*}\NormalTok{ other.rows[k][j]} - - \ControlFlowTok{return}\NormalTok{ Matrix(rows)} -\end{Highlighting} -\end{Shaded} - -The last overloaded operator is the most complex one. This is the -\texttt{*} operator, which is implemented through the \texttt{mul()} -method. In linear algebra, matrices don't have the same multiplication -operation as real numbers. Two matrices can be multiplied if the first -matrix has a number of columns equal to the number of rows of the second -matrix. The result of that operation is a new matrix where each element -is a dot product of the corresponding row of the first matrix and the -corresponding column of the second matrix. Here we've built our own -implementation of the matrix to present the idea of operators -overloading. Although Python lacks a built-in type for matrices, you -don't need to build them from scratch. The NumPy package is one of the -best Python mathematical packages and among others provides native -support for matrix algebra. You can easily obtain the NumPy package from -PyPI - -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. - -\hypertarget{_the_zen_of_python}{% -\subsection{The Zen of Python}\label{_the_zen_of_python}} - -\begin{Shaded} -\begin{Highlighting}[] -\OperatorTok{\textgreater{}\textgreater{}\textgreater{}} \ImportTok{import}\NormalTok{ this} -\end{Highlighting} -\end{Shaded} - -\begin{verbatim} -The Zen of Python, by Tim Peters - -Beautiful is better than ugly. -Explicit is better than implicit. -Simple is better than complex. -Complex is better than complicated. -Flat is better than nested. -Sparse is better than dense. -Readability counts. -Special cases aren't special enough to break the rules. -Although practicality beats purity. -Errors should never pass silently. -Unless explicitly silenced. -In the face of ambiguity, refuse the temptation to guess. -There should be one-- and preferably only one --obvious way to do it. -Although that way may not be obvious at first unless you're Dutch. -Now is better than never. -Although never is often better than *right* now. -If the implementation is hard to explain, it's a bad idea. -If the implementation is easy to explain, it may be a good idea. -Namespaces are one honking great idea -- let's do more of those! -\end{verbatim} - -\hypertarget{_pep8_style_guide_for_python_code}{% -\subsection{PEP8 - Style Guide for Python -Code}\label{_pep8_style_guide_for_python_code}} - -La première PEP qui va nous intéresser est la -\href{https://www.python.org/dev/peps/pep-0008/}{PEP 8 --- Style Guide -for Python Code}. Elle spécifie comment du code Python doit être -organisé ou formaté, quelles sont les conventions pour l'indentation, le -nommage des variables et des classes, \ldots\hspace{0pt} En bref, elle -décrit comment écrire du code proprement, afin que d'autres développeurs -puissent le reprendre facilement, ou simplement que votre base de code -ne dérive lentement vers un seuil de non-maintenabilité. - -Dans cet objectif, un outil existe et listera l'ensemble des conventions -qui ne sont pas correctement suivies dans votre projet: pep8. Pour -l'installer, passez par pip. Lancez ensuite la commande pep8 suivie du -chemin à analyser (\texttt{.}, le nom d'un répertoire, le nom d'un -fichier \texttt{.py}, \ldots\hspace{0pt}). Si vous souhaitez uniquement -avoir le nombre d'erreur de chaque type, saisissez les options -\texttt{-\/-statistics\ -qq}. - -\begin{Shaded} -\begin{Highlighting}[] -\NormalTok{$ }\ExtensionTok{pep8}\NormalTok{ . {-}{-}statistics {-}qq} - -\ExtensionTok{7}\NormalTok{ E101 indentation contains mixed spaces and tabs} -\ExtensionTok{6}\NormalTok{ E122 continuation line missing indentation or outdented} -\ExtensionTok{8}\NormalTok{ E127 continuation line over{-}indented for visual indent} -\ExtensionTok{23}\NormalTok{ E128 continuation line under{-}indented for visual indent} -\ExtensionTok{3}\NormalTok{ E131 continuation line unaligned for hanging indent} -\ExtensionTok{12}\NormalTok{ E201 whitespace after }\StringTok{\textquotesingle{}\{\textquotesingle{}} -\ExtensionTok{13}\NormalTok{ E202 whitespace before }\StringTok{\textquotesingle{}\}\textquotesingle{}} -\ExtensionTok{86}\NormalTok{ E203 whitespace before }\StringTok{\textquotesingle{}:\textquotesingle{}} -\end{Highlighting} -\end{Shaded} - -Si vous ne voulez pas être dérangé sur votre manière de coder, et que -vous voulez juste avoir un retour sur une analyse de votre code, essayez -\texttt{pyflakes}: cette librairie analysera vos sources à la recherche -de sources d'erreurs possibles (imports inutilisés, méthodes inconnues, -etc.). - \hypertarget{_pep257_docstring_conventions}{% \subsection{PEP257 - Docstring Conventions}\label{_pep257_docstring_conventions}} -Python étant un langage interprété fortement typé, il est plus que -conseillé, au même titre que les tests unitaires que nous verrons plus -bas, de documenter son code. Cela impose une certaine rigueur, mais -améliore énormément la qualité, la compréhension et la reprise du code -par une tierce personne. Cela implique aussi de \textbf{tout} -documenter: les modules, les paquets, les classes, les fonctions, -méthodes, \ldots\hspace{0pt} Ce qui peut également aller à contrecourant -d'autres pratiques cite:{[}clean\_code(53-74){]}; il y a une juste -mesure à prendre entre "tout documenter" et "tout bien documenter": -\begin{itemize} -\item - Inutile d'ajouter des watermarks, auteurs, \ldots\hspace{0pt} Git ou - tout VCS s'en sortira très bien et sera beaucoup plus efficace que - n'importe quelle chaîne de caractères que vous pourriez indiquer et - qui sera fausse dans six mois, -\item - Inutile de décrire quelque chose qui est évident; documenter la - méthode \texttt{get\_age()} d'une personne n'aura pas beaucoup - d'intérêt -\item - S'il est nécessaire de décrire un comportement au sein-même d'une - fonction, c'est que ce comportement pourrait être extrait dans une - nouvelle fonction (qui, elle, pourra être documentée) -\end{itemize} - -Documentation: be obsessed! Mais \textbf{le code reste la référence} - -Il existe plusieurs types de conventions de documentation: - -\begin{enumerate} -\def\labelenumi{\arabic{enumi}.} -\item - PEP 257 -\item - Numpy -\item - Google Style (parfois connue sous l'intitulé \texttt{Napoleon}) -\item - \ldots\hspace{0pt} -\end{enumerate} - -Les -\href{https://google.github.io/styleguide/pyguide.html\#38-comments-and-docstrings}{conventions -proposées par Google} nous semblent plus faciles à lire que du -RestructuredText, mais sont parfois moins bien intégrées que les -docstrings officiellement supportées (par exemple, -\href{https://clize.readthedocs.io/en/stable/}{clize} ne reconnait que -du RestructuredText; -\href{https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/}{l'auto-documentation} -de Django également). L'exemple donné dans les guides de style de Google -est celui-ci: - -\begin{Shaded} -\begin{Highlighting}[] -\KeywordTok{def}\NormalTok{ fetch\_smalltable\_rows(table\_handle: smalltable.Table,} -\NormalTok{ keys: Sequence[Union[}\BuiltInTok{bytes}\NormalTok{, }\BuiltInTok{str}\NormalTok{]],} -\NormalTok{ require\_all\_keys: }\BuiltInTok{bool} \OperatorTok{=} \VariableTok{False}\NormalTok{,} -\NormalTok{) }\OperatorTok{{-}\textgreater{}}\NormalTok{ Mapping[}\BuiltInTok{bytes}\NormalTok{, Tuple[}\BuiltInTok{str}\NormalTok{]]:} - \CommentTok{"""Fetches rows from a Smalltable.} - -\CommentTok{ Retrieves rows pertaining to the given keys from the Table instance} -\CommentTok{ represented by table\_handle. String keys will be UTF{-}8 encoded.} - -\CommentTok{ Args:} -\CommentTok{ table\_handle: An open smalltable.Table instance.} -\CommentTok{ keys: A sequence of strings representing the key of each table} -\CommentTok{ row to fetch. String keys will be UTF{-}8 encoded.} -\CommentTok{ require\_all\_keys: Optional; If require\_all\_keys is True only} -\CommentTok{ rows with values set for all keys will be returned.} - -\CommentTok{ Returns:} -\CommentTok{ A dict mapping keys to the corresponding table row data} -\CommentTok{ fetched. Each row is represented as a tuple of strings. For} -\CommentTok{ example:} - -\CommentTok{ \{b\textquotesingle{}Serak\textquotesingle{}: (\textquotesingle{}Rigel VII\textquotesingle{}, \textquotesingle{}Preparer\textquotesingle{}),} -\CommentTok{ b\textquotesingle{}Zim\textquotesingle{}: (\textquotesingle{}Irk\textquotesingle{}, \textquotesingle{}Invader\textquotesingle{}),} -\CommentTok{ b\textquotesingle{}Lrrr\textquotesingle{}: (\textquotesingle{}Omicron Persei 8\textquotesingle{}, \textquotesingle{}Emperor\textquotesingle{})\}} - -\CommentTok{ Returned keys are always bytes. If a key from the keys argument is} -\CommentTok{ missing from the dictionary, then that row was not found in the} -\CommentTok{ table (and require\_all\_keys must have been False).} - -\CommentTok{ Raises:} -\CommentTok{ IOError: An error occurred accessing the smalltable.} -\CommentTok{ """} -\end{Highlighting} -\end{Shaded} - -C'est-à-dire: - -\begin{enumerate} -\def\labelenumi{\arabic{enumi}.} -\item - Une courte ligne d'introduction, descriptive, indiquant ce que la - fonction ou la méthode réalise. Attention, la documentation ne doit - pas indiquer \emph{comment} la fonction/méthode est implémentée, mais - ce qu'elle fait concrètement (et succintement). -\item - Une ligne vide -\item - Une description plus complète et plus verbeuse, si vous le jugez - nécessaire -\item - Une ligne vide -\item - La description des arguments et paramètres, des valeurs de retour, des - exemples et les exceptions qui peuvent être levées. -\end{enumerate} - -Un exemple (encore) plus complet peut être trouvé -\href{https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html\#example-google}{dans -le dépôt sphinxcontrib-napoleon}. Et ici, nous tombons peut-être dans -l'excès de zèle: - -\begin{Shaded} -\begin{Highlighting}[] -\KeywordTok{def}\NormalTok{ module\_level\_function(param1, param2}\OperatorTok{=}\VariableTok{None}\NormalTok{, }\OperatorTok{*}\NormalTok{args, }\OperatorTok{**}\NormalTok{kwargs):} - \CommentTok{"""This is an example of a module level function.} - -\CommentTok{ Function parameters should be documented in the \textasciigrave{}\textasciigrave{}Args\textasciigrave{}\textasciigrave{} section. The name} -\CommentTok{ of each parameter is required. The type and description of each parameter} -\CommentTok{ is optional, but should be included if not obvious.} - -\CommentTok{ If \textbackslash{}*args or \textbackslash{}*\textbackslash{}*kwargs are accepted,} -\CommentTok{ they should be listed as \textasciigrave{}\textasciigrave{}*args\textasciigrave{}\textasciigrave{} and \textasciigrave{}\textasciigrave{}**kwargs\textasciigrave{}\textasciigrave{}.} - -\CommentTok{ The format for a parameter is::} - -\CommentTok{ name (type): description} -\CommentTok{ The description may span multiple lines. Following} -\CommentTok{ lines should be indented. The "(type)" is optional.} - -\CommentTok{ Multiple paragraphs are supported in parameter} -\CommentTok{ descriptions.} - -\CommentTok{ Args:} -\CommentTok{ param1 (int): The first parameter.} -\CommentTok{ param2 (:obj:\textasciigrave{}str\textasciigrave{}, optional): The second parameter. Defaults to None.} -\CommentTok{ Second line of description should be indented.} -\CommentTok{ *args: Variable length argument list.} -\CommentTok{ **kwargs: Arbitrary keyword arguments.} - -\CommentTok{ Returns:} -\CommentTok{ bool: True if successful, False otherwise.} - -\CommentTok{ The return type is optional and may be specified at the beginning of} -\CommentTok{ the \textasciigrave{}\textasciigrave{}Returns\textasciigrave{}\textasciigrave{} section followed by a colon.} - -\CommentTok{ The \textasciigrave{}\textasciigrave{}Returns\textasciigrave{}\textasciigrave{} section may span multiple lines and paragraphs.} -\CommentTok{ Following lines should be indented to match the first line.} - -\CommentTok{ The \textasciigrave{}\textasciigrave{}Returns\textasciigrave{}\textasciigrave{} section supports any reStructuredText formatting,} -\CommentTok{ including literal blocks::} - -\CommentTok{ \{} -\CommentTok{ \textquotesingle{}param1\textquotesingle{}: param1,} -\CommentTok{ \textquotesingle{}param2\textquotesingle{}: param2} -\CommentTok{ \}} - -\CommentTok{ Raises:} -\CommentTok{ AttributeError: The \textasciigrave{}\textasciigrave{}Raises\textasciigrave{}\textasciigrave{} section is a list of all exceptions} -\CommentTok{ that are relevant to the interface.} -\CommentTok{ ValueError: If \textasciigrave{}param2\textasciigrave{} is equal to \textasciigrave{}param1\textasciigrave{}.} - -\CommentTok{ """} - \ControlFlowTok{if}\NormalTok{ param1 }\OperatorTok{==}\NormalTok{ param2:} - \ControlFlowTok{raise} \PreprocessorTok{ValueError}\NormalTok{(}\StringTok{\textquotesingle{}param1 may not be equal to param2\textquotesingle{}}\NormalTok{)} - \ControlFlowTok{return} \VariableTok{True} -\end{Highlighting} -\end{Shaded} - -Pour ceux que cela pourrait intéresser, il existe -\href{https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring}{une -extension pour Codium}, comme nous le verrons juste après, qui permet de -générer automatiquement le squelette de documentation d'un bloc de code: - -\begin{figure} -\centering -\includegraphics{images/environment/python-docstring-vscode.png} -\caption{autodocstring} -\end{figure} - -Nous le verrons plus loin, Django permet de rendre la documentation -immédiatement accessible depuis son interface d'administration. Toute -information pertinente peut donc lier le code à un cas d'utilisation -concret. - -\hypertarget{_linters}{% -\subsection{Linters}\label{_linters}} - -Il existe plusieurs niveaux de \emph{linters}: - -\begin{enumerate} -\def\labelenumi{\arabic{enumi}.} -\item - Le premier niveau concerne - \href{https://pypi.org/project/pycodestyle/}{pycodestyle} - (anciennement, \texttt{pep8} justement\ldots\hspace{0pt}), qui analyse - votre code à la recherche d'erreurs de convention. -\item - Le deuxième niveau concerne - \href{https://pypi.org/project/pyflakes/}{pyflakes}. Pyflakes est un - \emph{simple} \footnote{Ce n'est pas moi qui le dit, c'est la doc du - projet} programme qui recherchera des erreurs parmi vos fichiers - Python. -\item - Le troisième niveau est - \href{https://pypi.org/project/flake8/}{Flake8}, qui regroupe les deux - premiers niveaux, en plus d'y ajouter flexibilité, extensions et une - analyse de complexité de McCabe. -\item - Le quatrième niveau \footnote{Oui, en Python, il n'y a que quatre - cercles à l'Enfer} est \href{https://pylint.org/}{PyLint}. -\end{enumerate} - -PyLint est le meilleur ami de votre \emph{moi} futur, un peu comme quand -vous prenez le temps de faire la vaisselle pour ne pas avoir à la faire -le lendemain: il rendra votre code soyeux et brillant, en posant des -affirmations spécifiques. A vous de les traiter en corrigeant le code ou -en apposant un \emph{tag} indiquant que vous avez pris connaissance de -la remarque, que vous en avez tenu compte, et que vous choisissez malgré -tout de faire autrement. - -Pour vous donner une idée, voici ce que cela pourrait donner avec un -code pas très propre et qui ne sert à rien: - -\begin{Shaded} -\begin{Highlighting}[] -\ImportTok{from}\NormalTok{ datetime }\ImportTok{import}\NormalTok{ datetime} - -\CommentTok{"""On stocke la date du jour dans la variable ToD4y"""} - -\NormalTok{ToD4y }\OperatorTok{=}\NormalTok{ datetime.today()} - -\KeywordTok{def}\NormalTok{ print\_today(ToD4y):} -\NormalTok{ today }\OperatorTok{=}\NormalTok{ ToD4y} - \BuiltInTok{print}\NormalTok{(ToD4y)} - -\KeywordTok{def}\NormalTok{ GetToday():} - \ControlFlowTok{return}\NormalTok{ ToD4y} - - -\ControlFlowTok{if} \VariableTok{\_\_name\_\_} \OperatorTok{==} \StringTok{"\_\_main\_\_"}\NormalTok{:} -\NormalTok{ t }\OperatorTok{=}\NormalTok{ Get\_Today()} - \BuiltInTok{print}\NormalTok{(t)} -\end{Highlighting} -\end{Shaded} - -Avec Flake8, nous obtiendrons ceci: - -\begin{Shaded} -\begin{Highlighting}[] -\ExtensionTok{test.py}\NormalTok{:7:1: E302 expected 2 blank lines, found 1} -\ExtensionTok{test.py}\NormalTok{:8:5: F841 local variable }\StringTok{\textquotesingle{}today\textquotesingle{}}\NormalTok{ is assigned to but never used} -\ExtensionTok{test.py}\NormalTok{:11:1: E302 expected 2 blank lines, found 1} -\ExtensionTok{test.py}\NormalTok{:16:8: E222 multiple spaces after operator} -\ExtensionTok{test.py}\NormalTok{:16:11: F821 undefined name }\StringTok{\textquotesingle{}Get\_Today\textquotesingle{}} -\ExtensionTok{test.py}\NormalTok{:18:1: W391 blank line at end of file} -\end{Highlighting} -\end{Shaded} - -Nous trouvons des erreurs: - -\begin{itemize} -\item - de \textbf{conventions}: le nombre de lignes qui séparent deux - fonctions, le nombre d'espace après un opérateur, une ligne vide à la - fin du fichier, \ldots\hspace{0pt} Ces \emph{erreurs} n'en sont pas - vraiment, elles indiquent juste de potentiels problèmes de - communication si le code devait être lu ou compris par une autre - personne. -\item - de \textbf{définition}: une variable assignée mais pas utilisée ou une - lexème non trouvé. Cette dernière information indique clairement un - bug potentiel. Ne pas en tenir compte nuira sans doute à la santé de - votre code (et risque de vous réveiller à cinq heures du mat', quand - votre application se prendra méchamment les pieds dans le tapis). -\end{itemize} - -L'étape d'après consiste à invoquer pylint. Lui, il est directement -moins conciliant: - -\begin{verbatim} -$ pylint test.py -************* Module test -test.py:16:6: C0326: Exactly one space required after assignment - t = Get_Today() - ^ (bad-whitespace) -test.py:18:0: C0305: Trailing newlines (trailing-newlines) -test.py:1:0: C0114: Missing module docstring (missing-module-docstring) -test.py:3:0: W0105: String statement has no effect (pointless-string-statement) -test.py:5:0: C0103: Constant name "ToD4y" doesn't conform to UPPER_CASE naming style (invalid-name) -test.py:7:16: W0621: Redefining name 'ToD4y' from outer scope (line 5) (redefined-outer-name) -test.py:7:0: C0103: Argument name "ToD4y" doesn't conform to snake_case naming style (invalid-name) -test.py:7:0: C0116: Missing function or method docstring (missing-function-docstring) -test.py:8:4: W0612: Unused variable 'today' (unused-variable) -test.py:11:0: C0103: Function name "GetToday" doesn't conform to snake_case naming style (invalid-name) -test.py:11:0: C0116: Missing function or method docstring (missing-function-docstring) -test.py:16:4: C0103: Constant name "t" doesn't conform to UPPER_CASE naming style (invalid-name) -test.py:16:10: E0602: Undefined variable 'Get_Today' (undefined-variable) - --------------------------------------------------------------------- -Your code has been rated at -5.45/10 -\end{verbatim} - -En gros, j'ai programmé comme une grosse bouse anémique (et oui: le -score d'évaluation du code permet bien d'aller en négatif). En vrac, -nous trouvons des problèmes liés: - -\begin{itemize} -\item - au nommage (C0103) et à la mise en forme (C0305, C0326, W0105) -\item - à des variables non définies (E0602) -\item - de la documentation manquante (C0114, C0116) -\item - de la redéfinition de variables (W0621). -\end{itemize} - -Pour reprendre la -\href{http://pylint.pycqa.org/en/latest/user_guide/message-control.html}{documentation}, -chaque code possède sa signification (ouf!): - -\begin{itemize} -\item - C convention related checks -\item - R refactoring related checks -\item - W various warnings -\item - E errors, for probable bugs in the code -\item - F fatal, if an error occurred which prevented pylint from doing - further* processing. -\end{itemize} - -TODO: Expliquer comment faire pour tagger une explication. - -TODO: Voir si la sortie de pylint est obligatoirement 0 s'il y a un -warning - -TODO: parler de \texttt{pylint\ -\/-errors-only} \hypertarget{_formatage_de_code}{% \subsection{Formatage de code}\label{_formatage_de_code}} -Nous avons parlé ci-dessous de style de codage pour Python (PEP8), de -style de rédaction pour la documentation (PEP257), d'un \emph{linter} -pour nous indiquer quels morceaux de code doivent absolument être revus, -\ldots\hspace{0pt} Reste que ces tâches sont parfois (très) souvent -fastidieuses: écrire un code propre et systématiquement cohérent est une -tâche ardue. Heureusement, il existe des outils pour nous aider (un -peu). -A nouveau, il existe plusieurs possibilités de formatage automatique du -code. Même si elle n'est pas parfaite, -\href{https://black.readthedocs.io/en/stable/}{Black} arrive à un -compromis entre clarté du code, facilité d'installation et d'intégration -et résultat. - -Est-ce que ce formatage est idéal et accepté par tout le monde ? -\textbf{Non}. Même Pylint arrivera parfois à râler. Mais ce formatage -conviendra dans 97,83\% des cas (au moins). - -\begin{quote} -By using Black, you agree to cede control over minutiae of -hand-formatting. In return, Black gives you speed, determinism, and -freedom from pycodestyle nagging about formatting. You will save time -and mental energy for more important matters. - -Black makes code review faster by producing the smallest diffs possible. -Blackened code looks the same regardless of the project you're reading. -Formatting becomes transparent after a while and you can focus on the -content instead. -\end{quote} - -Traduit rapidement à partir de la langue de Batman: "\emph{En utilisant -Black, vous cédez le contrôle sur le formatage de votre code. En retour, -Black vous fera gagner un max de temps, diminuera votre charge mentale -et fera revenir l'être aimé}". Mais la partie réellement intéressante -concerne le fait que "\emph{Tout code qui sera passé par Black aura la -même forme, indépendamment du project sur lequel vous serez en train de -travailler. L'étape de formatage deviendra transparente, et vous pourrez -vous concentrer sur le contenu}". \hypertarget{_complexituxe9_cyclomatique}{% \subsection{Complexité cyclomatique}\label{_complexituxe9_cyclomatique}} diff --git a/chapters/python.tex b/chapters/python.tex index 785b314..7716337 100644 --- a/chapters/python.tex +++ b/chapters/python.tex @@ -24,3 +24,513 @@ going to assume that he is a duck}" -- Source: \href{http://en.wikipedia.org/wiki/Duck_test}{Wikipedia}. \end{quote} +En fonction de votre niveau d'apprentissage du langage, plusieurs +ressources pourraient vous aider: + +\begin{itemize} +\item + \textbf{Pour les débutants}, + \href{https://automatetheboringstuff.com/}{Automate the Boring Stuff + with Python} cite:{[}boring\_stuff{]}, aka. \emph{Practical + Programming for Total Beginners} +\item + \textbf{Pour un (gros) niveau au dessus} et pour un état de l'art du + langage, nous ne pouvons que vous recommander le livre Expert Python + Programming cite:{[}expert\_python{]}, qui aborde énormément d'aspects + du langage en détails (mais pas toujours en profondeur): les + différents types d'interpréteurs, les éléments de langage avancés, + différents outils de productivité, métaprogrammation, optimisation de + code, programmation orientée évènements, multithreading et + concurrence, tests, \ldots\hspace{0pt} A ce jour, c'est le concentré + de sujets liés au langage le plus intéressant qui ait pu arriver entre + nos mains. +\end{itemize} + +En parallèle, si vous avez besoin d'un aide-mémoire ou d'une liste +exhaustive des types et structures de données du langage, référez-vous +au lien suivant: +\href{https://gto76.github.io/python-cheatsheet/}{Python Cheat Sheet}. + +\section{Protocoles de langage} + +Le modèle de données du langage spécifie un ensemble de méthodes qui +peuvent être surchargées. Ces méthodes suivent une convention de nommage +et leur nom est toujours encadré par un double tiret souligné; d'où leur +nom de "\emph{dunder methods}\index{dunder}" ou "\emph{double-underscore methods}". La +méthode la plus couramment utilisée est la méthode \texttt{init()}, qui +permet de surcharger l'initialisation d'une instance de classe. + +\begin{listing}[!ht] + \begin{minted}{python} + class CustomUserClass: + def __init__(self, initiatization_argument): + ... + \end{minted} +\end{listing} + +Ces méthodes, utilisées seules ou selon des combinaisons spécifiques, +constituent les \emph{protocoles de langage}. Une liste complètement des +\emph{dunder methods} peut être trouvée dans la section +\texttt{Data\ Model} de +\href{https://docs.python.org/3/reference/datamodel.html}{la +documentation du langage Python}. + +All operators are also exposed as ordinary functions in the operators +module. The documentation of that module gives a good overview of Python +operators. It can be found at +\url{https://docs.python.org/3.9/library/operator.html} + +If we say that an object implements a specific language protocol, it +means that it is compatible with a specific part of the Python language +syntax. + +The following is a table of the most common protocols within the Python +language. + +Protocol nameMethodsDescriptionCallable protocol\emph{call}()Allows +objects to be called with parentheses:instance()Descriptor +protocols\emph{set}(), \emph{get}(), and \emph{del}()Allows us to +manipulate the attribute access pattern of classes (see the Descriptors +section)Container protocol\emph{contains}()Allows us to test whether or +not an object contains some value using the in keyword:value in instance + +Python in Comparison with Other LanguagesIterable +protocol\emph{iter}()Allows objects to be iterated using the +forkeyword:for value in instance: \ldots\hspace{0pt}Sequence +protocol\emph{getitem}(),\emph{len}()Allows objects to be indexed with +square bracket syntax and queried for length using a built-in +function:item = instance{[}index{]}length = len(instance)Each operator +available in Python has its own protocol and operator overloading +happens by implementing the dunder methods of that protocol. Python +provides over 50 overloadable operators that can be divided into five +main groups:• Arithmetic operators • In-place assignment operators• +Comparison operators• Identity operators• Bitwise operatorsThat's a lot +of protocols so we won't discuss all of them here. We will instead take +a look at a practical example that will allow you to better understand +how to implement operator overloading on your own + +The \texttt{add()} method is responsible for overloading the \texttt{+} +(plus sign) operator and here it allows us to add two matrices together. +Only matrices of the same dimensions can be added together. This is a +fairly simple operation that involves adding all matrix elements one by +one to form a new matrix. + +The \texttt{sub()} method is responsible for overloading the \texttt{–} +(minus sign) operator that will be responsible for matrix subtraction. +To subtract two matrices, we use a similar technique as in the -- +operator: + +\begin{listing} + \begin{minted}{python} + def __sub__(self, other): + if (len(self.rows) != len(other.rows) or len(self.rows[0]) != len(other.rows[0])): + raise ValueError("Matrix dimensions don't match") + return Matrix([[a - b for a, b in zip(a_row, b_row)] for a_row, b_row in zip(self.rows, other.rows) ]) + \end{minted} +\end{listing} + +The last overloaded operator is the most complex one. This is the +\texttt{*} operator, which is implemented through the \texttt{mul()} +method. In linear algebra, matrices don't have the same multiplication +operation as real numbers. Two matrices can be multiplied if the first +matrix has a number of columns equal to the number of rows of the second +matrix. The result of that operation is a new matrix where each element +is a dot product of the corresponding row of the first matrix and the +corresponding column of the second matrix. Here we've built our own +implementation of the matrix to present the idea of operators +overloading. Although Python lacks a built-in type for matrices, you +don't need to build them from scratch. The NumPy package is one of the +best Python mathematical packages and among others provides native +support for matrix algebra. You can easily obtain the NumPy package from +PyPI + +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{The Zen of Python} + +\begin{listing}[!ht] +\begin{verbatim} + >>> import this + The Zen of Python, by Tim Peters + + Beautiful is better than ugly. + Explicit is better than implicit. + Simple is better than complex. + Complex is better than complicated. + Flat is better than nested. + Sparse is better than dense. + Readability counts. + Special cases aren't special enough to break the rules. + Although practicality beats purity. + Errors should never pass silently. + Unless explicitly silenced. + In the face of ambiguity, refuse the temptation to guess. + There should be one-- and preferably only one --obvious way to do it. + Although that way may not be obvious at first unless you're Dutch. + Now is better than never. + Although never is often better than *right* now. + If the implementation is hard to explain, it's a bad idea. + If the implementation is easy to explain, it may be a good idea. + Namespaces are one honking great idea -- let's do more of those! + +\end{verbatim} + \caption{The Zen of Python} +\end{listing} + +\section{Guide de style} + +La première PEP qui va nous intéresser est la PEP8. +Elle spécifie comment du code Python doit être organisé ou formaté, quelles sont les conventions pour l'indentation, le nommage des variables et des classes, ... +En bref, elle décrit comment écrire du code proprement, afin que d'autres développeurs puissent le reprendre facilement, ou simplement que votre base de code ne dérive lentement vers un seuil de non-maintenabilité. + +Dans cet objectif, un outil existe et listera l'ensemble des conventions qui ne sont pas correctement suivies dans votre projet: pep8. Pour l'installer, passez par pip. +Lancez ensuite la commande pep8 suivie du chemin à analyser (\texttt{.}, le nom d'un répertoire, le nom d'un fichier \texttt{.py}, \ldots\hspace{0pt}). +Si vous souhaitez uniquement avoir le nombre d'erreur de chaque type, saisissez les options \texttt{-\/-statistics\ -qq}. + +\begin{listing}[!ht] +\begin{verbatim} +$ pep8 . --statistics -qq +7 E101 indentation contains mixed spaces and tabs +6 E122 continuation line missing indentation or outdented +8 E127 continuation line over-indented for visual indent +23 E128 continuation line under-indented for visual indent +3 E131 continuation line unaligned for hanging indent +12 E201 whitespace after '{' +13 E202 whitespace before '}' +86 E203 whitespace before ':' +\end{verbatim} + \caption{Une utilisation de pep8} +\end{listing} + +Si vous ne voulez pas être dérangé sur votre manière de coder, et que vous voulez juste avoir un retour sur une analyse de votre code, essayez \texttt{pyflakes}: cette librairie analysera vos sources à la recherche de sources d'erreurs possibles (imports inutilisés, méthodes inconnues, etc.). + +\section{Conventions de documentation} + +Python étant un langage interprété fortement typé, il est plus que conseillé, au même titre que les tests unitaires que nous verrons plus bas, de documenter son code. +Cela impose une certaine rigueur, mais améliore énormément la qualité, la compréhension et la reprise du code par une tierce personne. +Cela implique aussi de \textbf{tout} documenter: les modules, les paquets, les classes, les fonctions, méthodes, \ldots\hspace{0pt} +Ce qui peut également aller à contrecourant d'autres pratiques \cite[53-74]{clean_code}; il y a une juste +mesure à prendre entre "tout documenter" et "tout bien documenter": + + +\begin{itemize} +\item + Inutile d'ajouter des watermarks, auteurs, \ldots\hspace{0pt} Git ou + tout VCS s'en sortira très bien et sera beaucoup plus efficace que + n'importe quelle chaîne de caractères que vous pourriez indiquer et + qui sera fausse dans six mois, +\item + Inutile de décrire quelque chose qui est évident; documenter la + méthode \texttt{get\_age()} d'une personne n'aura pas beaucoup + d'intérêt +\item + S'il est nécessaire de décrire un comportement au sein-même d'une + fonction, c'est que ce comportement pourrait être extrait dans une + nouvelle fonction (qui, elle, pourra être documentée) +\end{itemize} + +Documentation: be obsessed! Mais \textbf{le code reste la référence} + +Il existe plusieurs types de conventions de documentation: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + PEP 257 +\item + Numpy +\item + Google Style (parfois connue sous l'intitulé \texttt{Napoleon}) +\item + \ldots\hspace{0pt} +\end{enumerate} + +Les +\href{https://google.github.io/styleguide/pyguide.html\#38-comments-and-docstrings}{conventions +proposées par Google} nous semblent plus faciles à lire que du +RestructuredText, mais sont parfois moins bien intégrées que les +docstrings officiellement supportées (par exemple, +\href{https://clize.readthedocs.io/en/stable/}{clize} ne reconnait que +du RestructuredText; +\href{https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/}{l'auto-documentation} +de Django également). L'exemple donné dans les guides de style de Google +est celui-ci: + +\begin{listing}[!ht] + \begin{minted}{python} + def fetch_smalltable_rows(table_handle: smalltable.Table, keys: Sequence[Union[bytes, str]], require_all_keys: bool = False,) -> Mapping[bytes, Tuple[str]]: + """Fetches rows from a Smalltable. + + Retrieves rows pertaining to the given keys from the Table instance + represented by table_handle. String keys will be UTF-8 encoded. + + Args: + table_handle: An open smalltable.Table instance. + keys: A sequence of strings representing the key of each table + row to fetch. String keys will be UTF-8 encoded. + require_all_keys: Optional; If require_all_keys is True only + rows with values set for all keys will be returned. + + Returns: + A dict mapping keys to the corresponding table row data + fetched. Each row is represented as a tuple of strings. For + example: + + {b'Serak': ('Rigel VII', 'Preparer'), + b'Zim': ('Irk', 'Invader'), + b'Lrrr': ('Omicron Persei 8', 'Emperor')} + + Returned keys are always bytes. If a key from the keys argument is + missing from the dictionary, then that row was not found in the + table (and require_all_keys must have been False). + + Raises: + IOError: An error occurred accessing the smalltable. + """ + \end{minted} + \caption{Un exemple de documentation Napoleon} +\end{listing} + + +C'est-à-dire: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Une courte ligne d'introduction, descriptive, indiquant ce que la + fonction ou la méthode réalise. Attention, la documentation ne doit + pas indiquer \emph{comment} la fonction/méthode est implémentée, mais + ce qu'elle fait concrètement (et succintement). +\item + Une ligne vide +\item + Une description plus complète et plus verbeuse, si vous le jugez + nécessaire +\item + Une ligne vide +\item + La description des arguments et paramètres, des valeurs de retour, des + exemples et les exceptions qui peuvent être levées. +\end{enumerate} + +Un exemple (encore) plus complet peut être trouvé +\href{https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html\#example-google}{dans +le dépôt sphinxcontrib-napoleon}. Et ici, nous tombons peut-être dans +l'excès de zèle: + +\begin{figure}[!ht] +\centering + \scalebox{1.0}{\includegraphics[max size={\textwidth}{\textheight}]{images/napoleon-module-level-docstring.png}} +\caption{\url{https://xkcd.com/353/}} +\end{figure} + +Pour ceux que cela pourrait intéresser, il existe +\href{https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring}{une +extension pour Codium}, comme nous le verrons juste après, qui permet de +générer automatiquement le squelette de documentation d'un bloc de code: + +Nous le verrons plus loin, Django permet de rendre la documentation immédiatement accessible depuis l'interface d'administration. +Toute information pertinente peut donc lier le code à un cas d'utilisation concret, et rien n'est jamais réellement perdu. + +\section{Vérification du code (lint)\index{lint}} + +Il existe plusieurs niveaux de \emph{linters}: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Le premier niveau concerne + \href{https://pypi.org/project/pycodestyle/}{pycodestyle} + (anciennement, \texttt{pep8} justement\ldots\hspace{0pt}), qui analyse + votre code à la recherche d'erreurs de convention. +\item + Le deuxième niveau concerne + \href{https://pypi.org/project/pyflakes/}{pyflakes}. Pyflakes est un + \emph{simple} \footnote{Ce n'est pas moi qui le dit, c'est la doc du + projet} programme qui recherchera des erreurs parmi vos fichiers + Python. +\item + Le troisième niveau est + \href{https://pypi.org/project/flake8/}{Flake8}, qui regroupe les deux + premiers niveaux, en plus d'y ajouter flexibilité, extensions et une + analyse de complexité de McCabe. +\item + Le quatrième niveau \footnote{Oui, en Python, il n'y a que quatre + cercles à l'Enfer} est \href{https://pylint.org/}{PyLint}. +\end{enumerate} + +PyLint est le meilleur ami de votre \emph{moi} futur, un peu comme quand +vous prenez le temps de faire la vaisselle pour ne pas avoir à la faire +le lendemain: il rendra votre code soyeux et brillant, en posant des +affirmations spécifiques. A vous de les traiter en corrigeant le code ou +en apposant un \emph{tag} indiquant que vous avez pris connaissance de +la remarque, que vous en avez tenu compte, et que vous choisissez malgré +tout de faire autrement. + +Pour vous donner une idée, voici ce que cela pourrait donner avec un +code pas très propre et qui ne sert à rien: + +\begin{listing}[!ht] + \begin{minted}{python} + from datetime import datetime + """On stocke la date du jour dans la variable ToD4y""" + + ToD4y = datetime.today() + + def print_today(ToD4y): + today = ToD4y + print(ToD4y) + + def GetToday(): + return ToD4y + + if __name__ == "__main__": + t = Get_Today() + print(t) + \end{minted} + \caption{Un morceau de code qui ne sert à rien} +\end{listing} + +Avec Flake8, nous obtiendrons ceci: + +\begin{listing}[!ht] + \begin{verbatim} +test.py:7:1: E302 expected 2 blank lines, found 1 +test.py:8:5: F841 local variable 'today' is assigned to but never used +test.py:11:1: E302 expected 2 blank lines, found 1 +test.py:16:8: E222 multiple spaces after operator +test.py:16:11: F821 undefined name 'Get_Today' +test.py:18:1: W391 blank line at end of file + \end{verbatim} +\end{listing} + +Nous trouvons des erreurs: + +\begin{itemize} +\item + de \textbf{conventions}: le nombre de lignes qui séparent deux + fonctions, le nombre d'espace après un opérateur, une ligne vide à la + fin du fichier, \ldots\hspace{0pt} Ces \emph{erreurs} n'en sont pas + vraiment, elles indiquent juste de potentiels problèmes de + communication si le code devait être lu ou compris par une autre + personne. +\item + de \textbf{définition}: une variable assignée mais pas utilisée ou une + lexème non trouvé. Cette dernière information indique clairement un + bug potentiel. Ne pas en tenir compte nuira sans doute à la santé de + votre code (et risque de vous réveiller à cinq heures du mat', quand + votre application se prendra méchamment les pieds dans le tapis). +\end{itemize} + +L'étape d'après consiste à invoquer pylint. Lui, il est directement +moins conciliant: + +\begin{verbatim} +$ pylint test.py +************* Module test +test.py:16:6: C0326: Exactly one space required after assignment + t = Get_Today() + ^ (bad-whitespace) +test.py:18:0: C0305: Trailing newlines (trailing-newlines) +test.py:1:0: C0114: Missing module docstring (missing-module-docstring) +test.py:3:0: W0105: String statement has no effect (pointless-string-statement) +test.py:5:0: C0103: Constant name "ToD4y" doesn't conform to UPPER_CASE naming style (invalid-name) +test.py:7:16: W0621: Redefining name 'ToD4y' from outer scope (line 5) (redefined-outer-name) +test.py:7:0: C0103: Argument name "ToD4y" doesn't conform to snake_case naming style (invalid-name) +test.py:7:0: C0116: Missing function or method docstring (missing-function-docstring) +test.py:8:4: W0612: Unused variable 'today' (unused-variable) +test.py:11:0: C0103: Function name "GetToday" doesn't conform to snake_case naming style (invalid-name) +test.py:11:0: C0116: Missing function or method docstring (missing-function-docstring) +test.py:16:4: C0103: Constant name "t" doesn't conform to UPPER_CASE naming style (invalid-name) +test.py:16:10: E0602: Undefined variable 'Get_Today' (undefined-variable) + +-------------------------------------------------------------------- +Your code has been rated at -5.45/10 +\end{verbatim} + +En gros, j'ai programmé comme une grosse bouse anémique (et oui: le +score d'évaluation du code permet bien d'aller en négatif). En vrac, +nous trouvons des problèmes liés: + +\begin{itemize} +\item + au nommage (C0103) et à la mise en forme (C0305, C0326, W0105) +\item + à des variables non définies (E0602) +\item + de la documentation manquante (C0114, C0116) +\item + de la redéfinition de variables (W0621). +\end{itemize} + +Pour reprendre la +\href{http://pylint.pycqa.org/en/latest/user_guide/message-control.html}{documentation}, +chaque code possède sa signification (ouf!): + +\begin{itemize} +\item + C convention related checks +\item + R refactoring related checks +\item + W various warnings +\item + E errors, for probable bugs in the code +\item + F fatal, if an error occurred which prevented pylint from doing + further* processing. +\end{itemize} + +TODO: Expliquer comment faire pour tagger une explication. + +TODO: Voir si la sortie de pylint est obligatoirement 0 s'il y a un +warning + +TODO: parler de \texttt{pylint\ -\/-errors-only} + +\section{Formatage de code} + +Nous avons parlé ci-dessous de style de codage pour Python (PEP8), de +style de rédaction pour la documentation (PEP257), d'un \emph{linter} +pour nous indiquer quels morceaux de code doivent absolument être revus, +\ldots\hspace{0pt} Reste que ces tâches sont parfois (très) souvent +fastidieuses: écrire un code propre et systématiquement cohérent est une +tâche ardue. Heureusement, il existe des outils pour nous aider (un +peu). + +A nouveau, il existe plusieurs possibilités de formatage automatique du +code. Même si elle n'est pas parfaite, +\href{https://black.readthedocs.io/en/stable/}{Black} arrive à un +compromis entre clarté du code, facilité d'installation et d'intégration +et résultat. + +Est-ce que ce formatage est idéal et accepté par tout le monde ? +\textbf{Non}. Même Pylint arrivera parfois à râler. Mais ce formatage +conviendra dans 97,83\% des cas (au moins). + +\begin{quote} +By using Black, you agree to cede control over minutiae of +hand-formatting. In return, Black gives you speed, determinism, and +freedom from pycodestyle nagging about formatting. You will save time +and mental energy for more important matters. + +Black makes code review faster by producing the smallest diffs possible. +Blackened code looks the same regardless of the project you're reading. +Formatting becomes transparent after a while and you can focus on the +content instead. +\end{quote} + +Traduit rapidement à partir de la langue de Batman: "\emph{En utilisant +Black, vous cédez le contrôle sur le formatage de votre code. En retour, +Black vous fera gagner un max de temps, diminuera votre charge mentale +et fera revenir l'être aimé}". Mais la partie réellement intéressante +concerne le fait que "\emph{Tout code qui sera passé par Black aura la +même forme, indépendamment du project sur lequel vous serez en train de +travailler. L'étape de formatage deviendra transparente, et vous pourrez +vous concentrer sur le contenu}". + + diff --git a/images/napoleon-module-level-docstring.png b/images/napoleon-module-level-docstring.png new file mode 100644 index 0000000000000000000000000000000000000000..55172fc608a3e88a52022d69b5b1eb15a31e9ca8 GIT binary patch literal 146881 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 z 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 literal 0 HcmV?d00001 diff --git a/main.tex b/main.tex index 49890ec..46dab3d 100644 --- a/main.tex +++ b/main.tex @@ -10,6 +10,9 @@ \usepackage{graphics} \usepackage[export]{adjustbox} +\renewcommand\listlistingname{Liste des morceaux de code} + + \onehalfspacing \makeindex @@ -32,7 +35,8 @@ \tableofcontents \listoffigures \listoftables -\listoflistings +%\listoflistings +\addcontentsline{toc}{chapter}{\listlistingname}{\listoflistings} \mainmatter