Syntaxe Python

Syntaxe PythonPython SetupInstaller Python (recommandé)Linux (Ubuntu / Debian)WindowsInstaller un IDEInstructions (Pycharm ou IntelliJ IDEA)Instructions (VS Code)Instructions (Spyder)Faire un environnement virtuel dédiéAvec python-venvUnix/GNU/XNUWindowsConda envWindows/Unix/GNU/XNUExample : Environnement pour le machine learningpython-venvcondaBonus : Docker et VS Code Remote ContainerInstallationsUsage (setup) (il ne sera pas nécessaire pour la formation)Usage (reopen)Normes de syntaxeNormes de documentationBonus : Sphinx et napoleonNormes de codeOutillageInstructions (Pycharm ou IntelliJ IDEA)Instructions (VS Code)Autre : Kite (ML autocomplete)Language TourImportsMainVariable et Built-in typesLoopsFonctionsLambda et list map, filter et reduceLambdaOpération sur les list avec des lambdaError handlingGeneratorsClasses et les 4 piliers de l'OOPEncapsulationHéritageAbstractionPolymorphisme

Python Setup

Installer Python (recommandé)

Linux (Ubuntu / Debian)

Il est également possible d'installer Anaconda. Mais autant utiliser celui qui est inclus sur Linux.

Windows

Installer un IDE

Instructions (Pycharm ou IntelliJ IDEA)

Instructions (VS Code)

Instructions (Spyder)

Faire un environnement virtuel dédié

Un environnement dédié permet de séparer la configuration globale de la configuration locale.

Avec python-venv

Unix/GNU/XNU
Windows

Conda env

Windows/Unix/GNU/XNU

Example : Environnement pour le machine learning

Avant de commencer, sachez qu'il faut avoir une carte graphique NVIDIA et installer CUDA et cuDNN pour faire du machine learning.

python-venv
conda

Bonus : Docker et VS Code Remote Container

Installations
Usage (setup) (il ne sera pas nécessaire pour la formation)
Usage (reopen)

Normes de syntaxe

Normes de documentation

Bonus : Sphinx et napoleon

Il est possible de générer des PDFs grâce aux packages Sphinx et Napoléon.

Installation :

Imaginons cette architecture classique :

Cette exemple est repris avec class_example.

En étant à la racine :

Modifiez conf.py :

Remplacez ces lignes :

par :

Et ajoutez Napoleon en extension :

Remontez au niveau de docs et générez un template apidoc

Et générez enfin la documentation html

Pour voir la documentation, ouvrez dans build/html/index.html.

Il ne reste plus qu'à le publier !

Normes de code

Outillage

Je ne mettrais, ici, que les instructions pour installez les outils nécessaires pour le codestyle et docstyle.

Instructions (Pycharm ou IntelliJ IDEA)

Instructions (VS Code)

Autre : Kite (ML autocomplete)

kite.com

Language Tour

Imports

Main

Variable et Built-in types

Loops

Fonctions

Se rappeler de l'ordre :

  1. Arguments ordonnés, positionnés
  2. *args, arguments positionnés en trop
  3. Arguments optionnels, keyword
  4. *kwargs, arguments keyword en trop

Lambda et list map, filter et reduce

Lambda

Un lambda est une fonction qui n'a pas de nom. Il est possible de lui donner un nom avec une attribution = mais, en terme de code style, ce n'est pas conseillé. Généralement, on utilise un lambda pour des opérations nécessitant une function ou Callable en argument.

Opération sur les list avec des lambda

map, filter et reduce sont les fonctions à connaitre par ❤️.

map est un opérateur permettant de générer un Itérable nommé map en appliquant une function sur la liste cible.

filter est un opérateur permettant de générer un Itérable nommé filter en filtrant la liste cible via une condition bool.

reduce, accessible uniquement via from functools import reduce, est un opérateur qui combine les éléments d'une collection en utilisant un fonction. La fonction doit être de la forme (old_store, new_value) ⇒ new_store.

Unpack list :

Error handling

Capturer les erreurs d'exceptions.

Generators

Les generators sont des Iterable, c'est-à-dire, parcourable via boucle for.

Avant de commencer, voici des exemples connus d'utilisation de génération de list/set/dict par syntaxe ternaires.

Donc pour les generators :

Un générateur n'est utilisable qu'une seule fois ! Comme dans une boucle for.

La syntaxe complète d'un générateur est :

yield permet de retourner plusieurs valeurs ! Elle n'arrête donc pas la fonction !

Une belle utilisation d'un générateur est, par exemple, pour les nombres premiers :

Classes et les 4 piliers de l'OOP

Encapsulation

Pour rappel, une propriété publique est accessible partout, une propriété protégée est accessible uniquement aux méthodes et aux classes héritières. Une propriété privée est accessible uniquement dans la classe.

__init__ est le constructeur par défaut, les propriétés variables peuvent être initialisé, à l'instance.

En dehors de ça, on initialise les attributs statique ou class variables, c'est-à-dire, des attributs unique à la classe.

Il est possible de faire des méthodes similairement à des fonctions.

Les méthodes statiques, indépendante le l'instance, s'initialise avec le décorateur @staticmethod. On n'utilise pas self, vu que self peut ne pas être instanciais. Il faut appeler soi-même pour accéder à une variable statique, exemple : Complex.__private_property

Les @classmethod permettent de s'instancier à partir de soi-même, généralement pour faire des constructeurs nommés, comme par exemple les célèbre, json.parse() ou Model.from_json().

Pour faire des getters et setters:

Héritage

L'héritage permet d'obtenir les méthodes et attributs du parent. Autrement dit,

 

Abstraction

Les fonctions abstraites sont des fonctions ne pouvant être utilisé à l'instance. Pour pouvoir les utiliser, il faut les override, c'est-à-dire, hériter de la classe et écraser la fonction. Cela permet de donner un template pour les héritiers. Il est possible d'annoter la fonction avec @abc.abstractmethod via le package abc. Pour les getter abstraites, @abc.abstractproperty.

Il est également possible de faire des classes abstraites (classes ne pouvant être instanciais) avec le package abc. Cela permet que toutes les méthodes sont abstraites.

Exemple :

Si jamais vous faites :

Vous aurez :

Notez que dans cette exemple, je n'ai pas défini age.

Polymorphisme

Le polymorphisme permet l'utilisation de la même méthode malgré que la signature de l'objet est différente.

Exemple :

Grâce à l'abstraction et à l'héritage, le polymorphisme devient un des pilier les plus importants de l'OOP.

En utilisant un override, on obtient :