Prises de note de la formation python suivie en 2016. Il s'adresse à des personnes ayant des notions en développement ou en programmation. Bien entendu il s'adresse à des novices de Python. Cependant, nous n'aborderons pas son installation, l'environnement d'édition de texte. De plus, de nombreuses notions plus 'basiques' ne sont vues qu'à l'oral.
Fichier associé: src/1st_course.py
Python, qu'est-ce que c'est? Tout d'abord il s'agit d'un langage informatique comme C/C++, Java, JavaScript, Scala, ...
- Interprété: la traduction se fait en temps réel, lors de l'exécution (contrairement à un langage compilé). Un même script peut ainsi être exécuté sur des plateformes différents mais cela a un impact sur les performances.
- Fortement typé: les variables sont donc typées, les différences entre les chiffres et les lettres par exemple sont marquées. De plus, elles le sont fortement car Python différencie également les entiers et les réels, les caractères et les chaînes de caractères, ...
- Typage dynamique: son typage est également dynamique, les variables peuvent changer de type et ne sont pas déterminées dès leur création (comme en C++, par exemple). Ainsi un int pourra devenir un float, puis un string, ... Nous devrons alors faire attention à nos types lors de notre développement.
- CPython: l'implémentation de référence est écrite en C et se nomme CPython. Il existe aussi Jython en Java, IronPython en C#, PyPy en Python et d'autres encore.
- Introsectif: tout est objet, même les types de base. Pour cette raison nous retrouverons par la suite des fonctions 'spéciale' sous la forme
__functionname__. Nous pouvons avoir accès à toute les méthodes d'un objet via la fonctionsdir(my_var)et savoir son fonctionnement avechelp(my_var.function)qui nous donne la documentation. - Tout est vrai: en Python toutes les valeurs sont 'vraies' (i.e. bool(18) >>> True) sauf 0, False, None et ce qui est vide ([], {}, (,), ...)
- Muable Vs. Immuable: un objet immuable ne sera pas modifiée en appelant une fonction tandis que ce sera le cas si elle est mutable (in place).
- == Vs. is: l'égalité compare les valeurs tandis que
isregarde l'id, c'est à dire s'il s'agit exactement du même objet. Nous l'utilisons également pour savoir si un objet est None. - Listes Vs. Tuples: les listes sont mutables alors que les tuples sont immuables. Nous utilisons donc ces dernières quand on veut être sûr de ne pas modifier les valeurs. Nous pouvons pour les deux utiliser les listes/tuples en compréhension (i.e.
[i for i in liste if (cond)])
- Pour les structures for et while il existe un '
else' qui est utilisé quand la boucle est menée à terme. - Pour ces mêmes structures, il existe break et continue permettant de casser la boucle ou passer à la valeur suivante.
- Les dictionnaires ne sont pas ordonnées et leurs clés sont uniques.
- Déclaration: pour déclarer un dictionnaire nous utilisons
my_dict = {key1: val1, key2: val2}. Nous pouvons également utiliservars(args)qui va appelerargs.__dict__(). - Mutable: un dictionnaire est mutable. En revanche, les clés doit impérativement être immuable (i.e. la fonction
hashne renvoie pas d'erreur) - Obtention d'une valeur. Pour obtenir une valeur du dictionnaire on préféra utiliser
my_dict.get(key, [default_value])quemy_dict[key]car cette deuxième solution renvoie une erreur si la clé n'est pas dans le dictionnaire tandis que la fonction get renverraNoneou une valeur choisie. - On peut définir une clé sans valeur avec
my_dict.setdefault(key). La clé aura alorsNonecomme valeur. - Nous pouvons les utiliser pour implémenter un switch-case, absent en Python.
- Les ensembles sont des collections non ordonnées et sans doublons. Ils peuvent être utilisés pour la gestion des intersections et des unions.
- Les ensembles sont mutables.
- La définition se fait avec
set(my_values). - De nombreuses fonctions permettent de faire la 'différence' des éléments présents dans deux ensembles:
issubset,issuperset, ...
Il existe bien entendu de nombreuses collections, certaines par défaut comme nous venons de voir. Mais nous pouvons trouver toutes des collections disponibles avec import collections.
Par exemple, il y les objets Counter ressemblants aux dictionnaires plus ou moins quelques fonctions. Nous pouvons trouver ainsi des collections très intéressantes!
- any() Vs. all(): ces fonctions permettent de savoir si l'un des items est vrai (respectivement tous les items) ou non. Par exemple,
any([False, True])donneraTruetandis queall([False, True])renverraFalse - map() permet d'appliquer une fonction à chaque item d'un itérable
map(my_func, my_iter). Il existe dans le même type filter() qui filtrent les items. - zip() permet de zip deux itérateurs de même taille,
list(zip((0,1,2), ['a', 'b', 'c'])) >>> [(0, 'a'), (1, 'b'), (2, 'c')] - Créer des itérateurs afin de boucler efficacement avec
import itertools. Ce module offre en effet de nombreux itérateurs:count(),dropwhile(),combinations(), ...