Tout langage de programmation et toute technologie moderne est complexe et profond.
Les bibliothèques sont très importantes pour développer des logiciels au bon niveau d'abstraction.
Afin que vous puissiez être efficaces rapidement dans vos entreprises en alternance, il est important que vous connaissiez les principales bibliothèques offertes par le langage de programmation Python.
Il s'agit ici d'ordres de grandeur et de bonnes pratiques.
Il ne s'agit pas d'une règle stricte.
Il faut se référer au contexte de travail et aux règles de codage de l'entreprise dans laquelle vous intervenez.
Par exemple, lorsque l'on a dupliqué plusieurs fois le code de la racine carrée pour calculer la racine de 16, puis pour calculer la somme d'une racine carrée et d'une racine cubique.
A la place, nous avons désormais une fonction racine carrée propre et réutilisable.
On voit ici que les fonctions sont préfixées par le nom du module.
Cela ressemble à un appel de méthode, comme quand on appelle sort sur une liste.
Il vaut mieux éviter cette approche.
La diapositive suivante explique pourquoi.
Dans les exemples fournis, on sait d'où viennent les fonctions.
Imaginez maintenant une base de code de 1 million de lignes avec plusieurs centaines de modules.
Il s'agit là d'une bien meilleure alternative.
On n'a plus à taper le nom complet du module donc le code est moins lourd.
En même temps, on ne perd pas la qualification complète des noms donc le code reste clair et propre.
En Python, tout est objet.
Il est important de distinguer un langage de sa bibliothèque standard.
La bibliothèqe standard de Python est riche et constitue l'une de ses grandes forces.
Ces catégories de services ne sont pas tout à fait exhaustives.
Dans les prochaines diapositives, on donne simplement un aperçu de l'une des fonctionnalités offertes dans certaines de ces catégories.
Le préfixe "b" signifie qu'il s'agit d'un byte et non d'une chaîne de caractères
Le type byte est très utile lorsque l'on veut transiter des paquets sur un réseau.
Dans ce cas, on encode le message, souvent une str, vers un byte.
L'opération inverse de décodage est également disponible.
On recherche ici tous les mots qui commencent par "ton".
Le préfixe "r" signifie qu'il s'agit d'une expression régulière et non d'une chaîne de caractères.
Le \b signifie que l'on cherche le début d'un mot.
Ensuite, on dit que le mot doit débuter par "ton".
Enfin, le [a-z] signifie n'importe quel caractère entre a et z.
L'étoile * finale signifie n'importe quel nombre de l'expression précédente (donc [a-z] entre 0 et N fois).
On utilise plutôt i pour représenter la partie imaginaire pure.
La bibliothèque de nombres complexes de Python utilise j à la place.
On créé une base de données en mémoire.
On créé une table dans laquelle on insère une ligne.
Vous verrez en cours de méthodologie les détails sur cette syntaxe, qui s'appelle SQL.
On une partie du message compressé et décompressé pour montrer que ces opérations sont bijectives.
On n'affiche que les 11 premiers éléments compressés et décompressés pour voir que l'affichage de caractères non-ASCII prend plus de place à l'affichage (mais pas en mémoire ni sur disque).
Vous verrez sans doute en cours de cybersécurité les différents algorithmes de hashing.
On doit d'abord lancer ce script dans un 1er terminal.
On appelle ce genre de petit programme un echo server.
Encore une fois, vous approndirez ces concepts en cours de réseau.
Une fois que le serveur est lancé, il faut ouvrir un nouveau terminal puis lancer le client.
Le client envoie alors un message "Bonjour" au serveur en passant par le port 8080.
L'IP 127.0.0.1 correspond à localhost, c'est à dire la machine courante.
Donc la trame réseau reste en réalité sur la machine courante.
Une fois que le serveur reçoit la trame, il l'a renvoie directement et se déconnecte.
Le client reçoit la réponse du serveur et l'affiche.
Comme le serveur se contente de renvoyer le message reçu, le client affiche tout simplement "Bonjour".
On récupère la landing page du site https://yvo.solutions et on affiche les 15 premiers caractères du document HTML reçu.
On parse une simple liste contenant 3 constantes : 1, 2 et 3.
On peut voir comment l'interpréteur Python lit et représente en interne ce morceau de code simple.
Si on ne ferme pas le fichier, on a une "fuite de ressource" (resource leak :uk:).
Cela peut avoir de nombreuses conséquences néfastes.
L'une de ces conséquences peut être que les écritures fichiers ne sont pas sauvegardées.
Par défaut, on ouvre les fichiers en lecture seule.
En ajoutant le "w", on ouvre le fichier en écriture.
La première écriture écrase le contenu existant du fichier.
On peut aussi ouvrir un fichier en mode "ajout" (append :uk:).
Les écritures se font à la fin du fichier.
C'est même plus compliqué que cela car même un appel à flush n'entraine pas une écriture immédiate sur disque.
Il existe différentes raisons : l'ordonnanceur des tâches du système d'exploitation peut avoir allouer du temps CPU à d'autres tâches de plus haute priorité. Il est aussi tout simplement possible que le disque soit déjà en cours d'utilisation.
Cela étant, le délai d'un écriture sur disque après un flush est très court, de l'ordre de quelques microsecondes (10^(-6) secondes).
Le close entraine un flush automatique. Donc dans la majorité des cas, il n'est pas nécessaire d'appeler flush explicitement.
pip est livré avec l'interpréteur et est plus ou moins le gestionnaire par défaut.
Conda contient les binaires dans ses paquets et ne nécessite pas de compiler de sources.
pip peut nécessiter la compilation de sources, ce qui nécessite l'installation préalable de compilateurs et peut prendre un certain temps.
Vous verrez cela plus en détails en cours de droit.
Il s'agit essentiellement d'un warning par rapport à la présentation du gestionnaire de paquets pip.
Par exemple, si vous travaillez sur un driver en espace kernel, vous n'avez pas le choix : ce sera sous GPL.
En revanche, si vous travaillez sur un composant logiciel propriétaire sensible et fermé, il y a fort à parier que le service juridique vous refuse l'utilisation d'une bibliothèque sous GPL.
Dans tous les cas, demandez à votre manager, architecte logiciel ou principal engineer.
Expliquez pourquoi vous avez besoin de cette bibliothèque.
En effet, il est tout à fait possible que votre besoin soit déjà adressé différemment et que l'on vous oriente vers une autre solution.
On peut parler de :
- Constructeur.
- Composition.
- Héritage.
- Polymorphisme et surcharge.
- Diagramme de classes.