https://tssr.nolan.ovh by Flo.
#28/02/2025 - #10/03/2024

Apprendre le Python

Ici, on s’intéresse essentiellement aux notions de bases: les différents types de variables, les fonctions usuelles.

Venant de php, j'ai deja les "principes" algorithmiques de base, je vais m’intéresser aux spécificités du langage.

Je prends des notes par apport au cour d'OpenClassRooms: Apprenez les bases du langage Python
En parallèle, je lis également le cour de laConsole: python - Syntaxe et Algorithmie. Le petit pense-bête est bien utile.

Le cour d'OpenClassRooms survole, voir omet des notions essentielles: typage statique, Environnement Virtuels. Sans doute dans un soucis d’accessibilité au débutant. Je trouve, le cour de laConsole, plus adapté à mon profil. Enfin, la documentation officielle du language et son tutoriel qui permet de découvrir énormément de notions.
C'est pourquoi après la partie 1 et 2, je reprends les scripts en "typant" et en ajoutant une gestion des erreurs.

Principes de base

Quelques fonctions usuelles

  • print(): permet d'afficher du texte, une option f est disponible pour faciliter l'affichage des variables. - voir le tutoriel officiel
  • type(): permet d'afficher le type d'une variable (c'est "vague" pour un début).
  • input("une question?"): permet de demander un input à l'utilisateur
  • print(f"{type(une_variable)}"): permet d'afficher le 'type' d'une variable

Les types variables

On retrouve ceux de bases, je ne vais m'attarder sur ces derniers.

A noter, qu'on a pas de distinction entre une variable et une constante.

La liste [] est un élément nouveau pour moi, j'ai tendance à la comparer au Tableau de php.

...
Les indices d'une liste.

On dispose d'une série de fonctions pour "interagir" avec les listes:

  • .apprend(): ajouter un élément
  • .remove(): retire un élément, on peut aussi passer par l'index via del
  • len(): connaître la longueur de la liste
  • .sort(): permet de trier la liste
  • extend(): permet d'ajouter des éléments à la fin
  • pop(): supprime l'élément indiquer ou le dernier élément
  • index(): renvoie la première occurrence de l'élément spécifié
  • count(): permet de compter combien de fois on trouve un élément spécifié
  • revers(): permet d'inverser l'ordre des éléments
Un peu comme les fonctions sur les tableaux en php, on peut faire pas mal de choses.

Aussi, on a les tuples, au lieu d'utiliser des [] on utilise des ().
Le principe est le même que les listes, sont que le tuples ne sont pas modifiable. Les tuples peuvent se concaténer entre eux.

On a également les dictionnaires, en php l'équivalant serait les tableaux scalaires. C'est un ensemble de clé/valeur. Cela resemble un peu à un objet en JS. On les créer via {}

Tout comme les lists, pour les dictionnaires on dispose de fonctions:

  • .keys(): retourne une vue sur les clés du dico. (pas encore vu l'utilité pour l'instant)
  • .values(): retourne une vue sur les valeurs du dico. (pas encore vu l'utilité pour l'instant)
  • .items(): retourne une vue sur les couples (clé, valeur) du dico. (pas encore vu l'utilité pour l'instant)
  • .keys(): retourne une vue sur les clés du dico. (pas encore vu l'utilité pour l'instant)
  • .get(): permet de connaître la valeur d'une clé
  • .pop(): supprime la clé spécifié ou none si clé non trouvée
  • .clear(): supprime tous les éléments

Le typage statique

Les différents types:

  • int
  • float
  • bool
  • str
  • bytes
  • .les collections.
  • x: list[_indiquer_un_type_]
  • x: set[_indiquer_un_type_]
  • x: dict[str, float] = {...} (ceci est un exemple)
  • x: tuple[int, str, float] = (3, "yes", 7.5)
  • ...
  • none
  • not none
Comme en php, quand plusieurs types sont possible on peut les indiquer en séparant par "|".

Il existe des types "avancés", ces derniers nécessite l'import du module typing. A voir, par la suite.

Le gestionnaire de dépendance

Contrairement à PHP, Python possède un gestionnaire de dépendances natif: pip.

Afin de mieux gérer les dépendances de chaque projet, on va utiliser des environnements virtuels.
Cela permet une isolation (évite les conflits de versions) et une portabilité du projet.

Cet environnement se créer via la commande: python -m venv _nom_de_l_environnement_auquel_on_ajoute_env
Exemple: py -m venv dev_tssr_env

Pour supprimer un environnement virtuel supprimer son dossier.

Une fois l'environnement créé, il faut l'activer: nom_env\scripts\activate (pour windows). Pour linux/macOS: source mon_env/bin/active

Pour le désactiver: deactivate

Remarque: concernant le versioning, le répertoire d'environnement virtuel sera ignoré. On créera un fichier requirements.txt qui contiendra la liste des dépendances du projet.
Cela peut se faire via pip freeze > requirements.txt

Pour installer les dépendances il suffit alors de faire: pip install -r requirements.txt

Pour afficher la liste des packages installés: pip freeze

Le slicing

Via l'IA, j'ai découvert un exemple de slicing. Tout comme en php, les caractères d'une chaîne sont accessible par index, comme dans un tableau.

Ici, Python propose du Slicing, cela permet d'extraire une partie d'une chaîne, d'une liste, tuple et autres.

sequence[start:stop:step]

  • start: l'indice de début de la tranche (inclus). Si omis, le slicing commence au début de la séquence.
  • stop: l'indice de fin de la tranche (exclus). Si omis, le slicing se termine à la fin de la séquence.
  • step: le pas entre chaque élément de la tranche. Si omis, le pas est de 1.

Points clés:

  • Indices négatifs: Vous pouvez utiliser des indices négatifs pour compter à partir de la fin de la séquence.
  • Omission des indices: Si vous omettez start, stop, ou step, Python utilise des valeurs par défaut.
  • Pas négatif: Un pas négatif permet d'inverser la séquence.

Quelques remarques perso:

  • De base pas de var_dump, faut l'implémenter
  • Pas d'opérateur ++, pour incrémenter une variable de 1: var+=1
  • L'indentation est obligatoire, la lecture du code est plus "légère", mais je trouve que c'est plus "austère"
  • La philosophie du python: Zen de Python
  • Le match est l'équivalant du switch de PHP
  • Le dictionnaire semble être équivalant au tableau scalaire de php
  • Pas d'auto-loading comme en php, mais des import
  • Pas de foreach comme en php, mais une boucle for assez "sexy" de base avec in range()
  • Contrairement à php, il semble que Python les guillemets simple ou double soient traitées de manière équivalente en terme d'optimisation.
  • Pour quitter un script on peut utiliser exit() ou sys.exit() (il faut importer sys)
  • Le module mypy, indique qu'il ne faut pas nommé une variable du même nom qu'une fonction.

J'ai terminé ce cour, j'ai passé plus de temps, car je suis allé au delà du cour, découverte de l'environnement virtual et du typage.
J'ai hâte de découvrir la syntaxe pour l'orienté objet. Et pourquoi pas ensuite découvrir le Framework Django

Remarque: la prise de note ici est minimaliste, j'utilise surtout le pense-bête de laConsole.