Aide Mémoire Python
Aide Mémoire Python
Variables et Affectations
Aide Mémoire Python Une variable est une étiquette liée à un objet en mémoire. Elle n’a pas de type
et ne nécessite pas de déclaration mais doit être affectée à un objet avant toute
utilisation. Son nom ne peut contenir que les caractères azAZ09_ et ne peut
pas débuter par un chiffre. On peut détruire une variable avec le mot clef del.
Petit guide de survie à l’attention variable = value #affectation simple
v1, v2, v3 = val1, val2, val3 #affectation multiple
des étudiants de CentraleSupélec. del v1 #destruction de v1
Édition 2015 None est une constante pour représenter ce qui n’a pas de valeur, pour autant,
affecter None à une variable revient bien à lui donner une valeur.
Python 3.4 On obtient le type d’un objet o avec la fonction type(o) et son identité avec
id(o). C'est un entier unique associé à tout objet : son adresse en mémoire.
Type Booléen
True et False sont les littéraux booléens. Quelque soit son type, une valeur
peut être comparé à un booléen. Les valeurs None, False, 0, 0.0, 0j, ’’, (),
[] et {} sont considérées comme fausses. Toute autre est vraie.
Opérations de logique par ordre décroissant de priorité, or et and sont coupe-circuits.
Opérateurs Description
x or y si x est faux alors y, sinon x
x and y si x est faux alors x, sinon y
not x si x est faux alors True, sinon False
Types Numériques
Description des littéraux des trois types numériques de Python.
Type Description Litéraux
int Entiers signés sur 32 bits 1,-26, 2085
float Nombres à virgule flottante 123.4 1.234e2
complex Nombres complexes 1+1j 1e0+1e0j
Marc-Antoine Weisser
Les opérateurs numériques.
Opérateurs Description
x+y, x-y, x*y Somme, différence et produit
x/y Division réelle de x par y Tous les opérateurs
Arithmétique
binaires (+, -, *, /,
x//y Partie entière du quotient de x par y
//, **, %, &, |, ^)
x**y, pow(x,y) x puissance y peuvent être utilisés
abs(x) Valeur absolue de x dans une affectation
round(x) Arrondi : round(3.57) ⇒ 3.6 raccourcie.
x%y Reste de la division de x par y
a+=b ⇔ a=a+b
x&y, x|y, x^y Opérations bit à bit (et/ou/xor) sur des int
Binaire
a**=b ⇔ a=a**b
x<<y, x>>y Décalage de bits non signés sur des int a|=b ⇔ a=a|b
~x Complément bit à bit sur des int
Logique
Opérations de comparaisons. Le type de chaque opérande est quelconque.
Le résultat est un booléen. Les opérations sont combinables : 12 <= x < 20
Opérateurs Description
<, <=, >, >= <, ≤, >, ≥
==, != Égalité et inégalité de valeurs.
is, is not Identité et différence d'objet. a is b ⇔ id(a) == id(b)
S équences C haînes de C aractères
Description Générale Description Générale
Les séquences sont des suites ordonnées d’objets. Les principales sont : Il existe plusieurs notation pour littéraux de type chaîne de caractères (str).
tuple, list, range et str. Seuls les séquences de type list sont mutables : Elles sont toutes équivalentes : "Guillemets", 'Apostrophes', """Triple
on peut les modifier. Les séquences sont des objets itérables (voir la boucle guillemets""" et '''Triple apostrophes'''. Les notations triples
for), on peut accéder aux éléments à partir de leurs indices commençant à 0. peuvent contenir des retour à la ligne, les autres doivent utiliser le caractère
Les quatre principales séquences. échappé : \n. Précéder une chaîne de r annule l’échappement des caractères.
Ainsi r"\\" donnera la chaîne : \\ et non pas \.
Type Description Seq. Vide Exemple
tuple Séquence non-muables, types quelconques () (1, 3.4, None) Principaux caractères échapés
str Séquence non-mutable de caractères "", '' "string", 'cc' Code Description Code Description Code Description
list Séquence mutable, types quelconques. [] [2, 4, 6, 8] \n Retour à la ligne \' Apostrophe \\ Backslash
range Séquence non-mutable d’entiers range(2,10,2) \t Tabulation \" Guillemets \b Backspace
\a Bip \N{name} Unicode name \Ooo \xhh octal et hexa
Conditionnelle
x in s True si x ∈ s, False sinon …
associé à une condition True sera exécuté.
Instruction
x not in s True si x ∉ s, False sinon elif condition :
s == o True si s ⋂ o = s, False sinon
Si toute condition est fausse, le bloc optionel …
final else sera exécuté. else :
Pour set et frozenset
Conditionnelle
s | o | ... Crée le set union de s,o,… while condition :
s & o & ... Crée le set intersection de s,o,… Le mot clef break entraine une sortie
Boucle
…
s - o - ... Crée le set avec les éléments de s moins ceux de o,… immédiate de la boucle tandis que continue else :
s ^ o Crée le set avec les éléments uniquement dans s ou o. passe à l’itération suivante. …
Aussi notés : s.union(o,…) s.intersection(o,…)
Le bloc else est optionel. Il exécuté à la sortie
s.difference(o,…) s.symetric_difference(o)
du while sauf si c'est avec break.
s.copy() Renvoie une copy superficielle de s.
Le bloc est exécuté pour chaque valeur i
Boucle pour
s |= o | ... Semblable aux opérations ci-dessus mais en modifiant s. for i in iterable :
contenu dans l'objet iterable.
chaque
Pour set uniquement
math
leur assignera la valeur par défaut indiquée dans la définition de la fonction. factorial(x) Factorielle de x.
Les paramètres nommés optionnels sont indiqués avec '**' et conventiellement
sin(x) cos(x) Fonctions trigonométriques usuelles, en radian.
tan(x) Également :asin(x), sinh(x),...
le nom de variable kwargs. À l'appel, tout paramètre nommé ne correspondant
degrees(x) Conversion de x, de radians vers degrés
pas à un paramètre avec une valeur par défaut sera ajouté au dict kwagrs.
randian(x) Conversion de x, de degrés vers radians
seed(x) Utilise x pour initialiser la graine du générateur.
Appel random() Génère un float suivant une distribution unif. sur [0,1[.
randint(a,b) Génère un int suivant une distribution unif. sur [a,b].
random
Pour appeler une fonction, on fait suivre son nom de parenthèses contenant
la liste des paramètres. Les parenthèses sont obligatoires même s'il n'y a uniform(a,b) Génère float suivant une distribution uniforme sur [a,b[.
aucun paramètre. L'ordre est important : paramètres positionnels obligatoires, choice(seq) Sélectionne un élément parmi une séquence non vide.
paramètres positionnels optionnels et enfin paramètres nommés. shuffle(l) Mélange les éléments de l. Ne renvoie rien.
sample(pop,x) Renvoie une liste de x éléments tirés dans pop.
fctName(pParam, …, *args, nParam=val, **kwargs ) chdir(path) Change le répertoire courant qui devient path (str).
getcwd() Renvoie le répertoire courant (str).
Lorsque l'on utilise une fonction sans la faire suivre de parenthèses on désigne
listdir(path) Liste les fichiers contenus dans le répertoire path.
la fonction elle même plutôt que son appel.
mkdir(path) Crée un répertoire path.
os
lambda x, y, … : expr(x,y,…)
f.readline() Renvoie une ligne du fichier.
f.readlines() Renvoie une liste des lignes du fichier.
f.flush() Vide le buffer d'écriture.
f.close() Vide le buffer d'écriture et ferme le fichier.
argv Liste des arguments du programme.
exit([s]) Quitte le programme. La valeur de sortie est s sinon 0.
sys
On peut ajouter des attributs à un objet o (sauf s'il est de type builtin). Ce sont class Rectangle(object):
def __init__(self, coin, lar, hau):
des variables accessibles lié à l'objet o. On y accède avec la notation "point" : self.coin = coin
o.attr = expr pour donner une valeur, o.attr pour y accéder dans une self.lar = lar
expression ou del o.attr pour le détruire. Le plus courant est que chaque self.hau = hau
objet d'une classe dispose des mêmes attributs. Pour cela on les définit dans
une méthode spéciale __init__. def trouveCentre(self):
cx = self.an.x + self.lar / 2
def __init__(self [, params]) : #self désigne l'objet en cy = self.an.y + self.hau / 2
self.var_i = expr #cours de création return Point(xc,yc)
Pour construire un objet de la classe ClassName, on utilise l'instruction class Carre(Rectangle):
suivante : ClassName( [params] ). Elle aura pour conséquence l'allocation def __init__(self, coin, cote):
de l'espace nécessaire à l'objet et son initialisation par appel implicite à la Rectangle.__init__(self, coin, cote, cote)
méthode __init__ avec comme paramètre l'objet en cours de création et les
def surface(self):
paramètres params. return self.lar**2
Une classe est elle même un objet. Elle peut donc disposer d'attributs,
c = Carre( Point(0,0), 10 )
accessible par la notation "point" : ClassName.attr_classe. Tout objet o de
print( "Centre du carré", c.trouveCentre() )
type ClassName peut accéder aux attributs de ClassName : o.class_attr.
Attention, on ne distingue pas explicitement l'utilisation des attributs liés à la
classe de ceux liés à l'objet. Méthodes Spéciales
Les méthodes spéciales permettent de spécifier le comportement des objets
Fonctions par rapport à certains opérateurs ou fonction du langage. Elles commencent et
Tout objet (et donc également toute classe) dispose d'attributs de type finissent toutes par deux caractères soulignés :'__'.
fonction, on parle de méthode. Pour appeler une méthode, on utilise la Remarque : lors de l'utilisation d'un opérateur binaire (ex. x+y), la méthode
notation point. On distingue deux cas. Lorsque l'on appelle une méthode sur __add__ est appelée sur x, si celle ci est non définie alors c'est __radd__ qui
un objet, o.method(params), l'objet sera passé implicitement comme premier est appelée sur y. Dans les deux cas un nouvel objet est crée. Pour l'affectation
paramètre positionnel. Lorsque l'on appelle une méthode sur un objet de type raccourcie x+=y, la méthode appelée est __iadd__. Elle modifie la valeur de x.
classe, ClassName.static_method(params), aucun paramètre implicite n'est Liste de méthodes spéciales usuelles.
ajouté en paramètre. On parle de méthode statique. str(o) → __str__(self)
x<y → __lt__(self,y)
En plus d'un certain nombre de méthodes déjà existantes, il est possible x=<y → __le__(self,y)
repr(o) → __repr__(self)
d'associer à un objets de nouvelles méthodes. On peut le faire indépendamment x==y → __eq__(self,y)
format(o, s) → __format__(self, s)
bool(o) → __bool__(self)
pour chaque objet avec la notation "point" vu plus haut en ajoutant un attribut x!=y → __ne__(self,y)
int(o) → __int__(self)
de type fonction. Dans la conception objet, on tend à ce que tous les objets x>y → __gt__(self,y)
float(o) → __float__(self)
d'une certaine classe partage les mêmes méthodes. Elles sont donc définies de x=>y → __ge__(self,y)
complex(o) → __complex__(self)
manière commune dans le bloc de définition de la classe. round(o,n) → __round__(self,n)
x+y → __add__(self,y)
x-y → __sub__(self,y)
Héritage x*y → __mul__(self,y)
o.n
o.n=v
→
→
__getattr__(self,n)
__setattr__(self,n,v)
x/y → __truediv__(self,y)
del o.n → __delattr__(self,n)
L'héritage permet de donner à une classe fille un ensemble de propriétés issues x//y → __floordiv__(self,y)
hash(o) → __hash__(self)
de classes mères. Ainsi, une classe fille hérite des méthodes de ses classes x%y → __mod__(self,y)
mères. Lorsqu'un objet d'une de type classe fille, appelle une méthode, celle-ci x**y → __pow__(self,y)
len(o) → __len__(self)
va d'abord être recherchée dans la classe fille puis dans les classes mères par x<<y → __lshift__(self,y)
o[k] → __getitem__(self,k)
x>>y → __rshift__(self,y)
ordre d'apparition dans la déclaration de la classe fille. o[k]=v → __setitem__(self,k,v)
x&y → __and__(self,y)
del o[k] → __delitem__(self,k)
Le fonctionnement des méthodes issues des classes mères nécessite souvent x|y → __or__(self,y)
reversed(o) → __reversed__(self)
l'ajout d'un certain nombre d'attributs présents dans les classes mères à la x^y → __xor__(self,y)
x in o → __contains__(self,x)
classe fille. Cela peut être fait dans la méthode __init__, en appelant les for i in o: → __iter__(self)
-x → __neg__(self)
méthodes __init__ des classes mères : ParentClass.__init__(self,...). next(g) → __next__(self)
+x → __pos__(self)
Attention, ces méthodes sont appelées dans l'ordre choisi par le développeur, abs(x)→ __abs__(self)
ainsi certain attributs peuvent être initialiser plusieurs fois et donc "écrasé. Il faut ~x → __invert__(self)
with → __enter__(self)
donc être vigilent en cas d'héritage multiple. → __exit__(self)
O pérations A vancées A utres
Range Entrées/Sorties Standard
La classe range permet de construire des itérables pour parcourir des valeurs La fonction print(*objects) permet d'écrire des chaînes de caractères sur la
entières. Son constructeur prend jusqu'à trois paramètres : range(fin), sortie standard d'un programme : la console. Cette fonction appelle la méthode
range(deb,fin) ou range(deb,fin,pas). Ex. : "for i in range(10)". __str__ de chaque paramètre pour le convertir en chaîne avant de l'afficher.
Attention, range n'est pas un générateur (voir ci-dessous). La fonction input([prompt]) permet d'écrire sur l'entrée standard : le clavier.
Cette fonction renvoie les caractères saisis juqu'au premier retour à la ligne. En
option elle prend une chaîne prompt qui sera affichée avant.
Générateurs
Un générateur est une description d'une suite de valeurs qui ne seront générées Lecture/Écriture dans des Fichiers
qu'à leur utilisation, un générateur consomme donc peu de mémoire.
( expr(var) for var in iter ) Les fonctions utilisées pour manipuler des fichiers sont contenues dans le
( expr(var) for var in iter if condition(var) ) package io. Ce sont open, close, read, readline, readlines et write. Ces
fonctions sont accessibles sans importer explicitement le module io. Voir dans
On égraine les valeurs d'un générateur en appelant la fonction next(generator) la colonne Module, la section Module Utile pour les détails de ces fonctions.
qui renvoie un nouvelle valeur de generator ou en l'utilisant comme itérable
dans une boucle : for i in generator. La lecture/écriture s'utilise de préférence avec un manageur de contexte (voir
colonne Contrôle de Flux. Dans l'exemple, suivant la fonction close est appelée
On peut également utiliser le mot clef yield pour créer des générateurs. Le implicitement à la sortie du contexte.
fonctionnement est semblable a la déclaration d'une fonction mais on utilise
yield à la place de return. La fonction est mise en pause à chaque instruction
Un objet fichier est itérable pouvant être utiliser pour lire les lignes une à une.
yield et l'exécution reprend du même endroit à chaque appel de next. with open("/chemin/du/fichier.ext") as f :
print( f.readline() ) #lit la première ligne de f
def fib(max) : for i in fib(100): for l in f : #lit toutes les suivantes
a,b = 0,1 print(i) print( l )
while a < max :
yield a
a,b = b, a+b Conversions de Type
On peut forcer la construction de valeurs en transformant le générateur en list
ou en tuple avec les méthodes de conversion (list(g), tuple(g)). On peut Python dispose de fonctions pour les conversions entre type. Le comportement
également utiliser les notations suivantes pour construire directement des listes des ces fonctions peut être défini pour chaque objet grace aux méthodes
et dictionnaires. On parle de liste (et dictionnaire) en compréhension. spéciales correspondantes (voir colonne Objets et Classes (Suite)).
tuple(i for i in range(10) if i%2==0) #(0,2,4,6,8) Les fonctions de conversion vers les types numériques sont int(o), float(o)
[[j for j in range(4)] for i in range(4)] #matrice 4x4 et complex(o). Pour la conversion en chaîne de caractères, deux fonctions
{i:i*i for i in range(5)} #{0:0, 1:1, 2:4, 3:9, 4:16} sont disponibles : str(o) et repr(o). La première donne une représentation
lisible, la seconde une représentation sans ambiguité. La fonction str est
implicitement appelé lors de l'appel de print(o) pour convertir o en chaîne.
Opérations sur des Objets Itérables La fonction ord(c) renvoie l'entier correspondant au code unicode associé à
Fonctions sur les itérables un caractère. L'opération inverse est chr(i).
Fonctions Descriptions
all(iter)
any(iter)
True si tout élément de iter est True, sinon False.
True si au moins un élément est True, sinon False.
Expression Conditionnelle
enumerate(iter) Construit un iterator contenant les tuples index,objet Une expression conditionnelle a une valeur dépendant d'une condition. Sa
de tous les objets de iter. syntaxe est la suivante : true_val if condition else false_val
Construit un iterator avec les éléments contenus dans
filter(function,iter)
iter pour lesquels function renvoie True.
Si condition est vraie, cette expression vaudra true_val, sinon elle faudra
false_val. Voici deux exemples équivalents.
map(function,iter) Construit un iterator qui applique function à tous
les objets de iter. if x>=0 :
Construit une list triée par ordre croissant ou abs = x
sorted(iter [,reverse]) abs = x if x>=0 else -x
décroissant si reverse est True. else :
Construit un iterator qui aggrège tous les éléments abs = -x
zip(*iterables)
des itérables en argument.