Python
Sommaire
- Les bases
- Programmation orientée objet
- Les condition
- L’iteration
- Les fonctions
- Les classes
- Gestion des fichiers et récupération des erreurs
- Les modules et les paquets
- Les modules tiers
- Les expressions rationnelles
- La BDD
Les bases
Methodes utiles pour debuger:
type(var)
dir(var)
str(var)
Cet attribut spécial vous donne les valeurs des attributs de l'instance:
ma_voiture.__dict__
{'nom': 'Ferrari'}
Voir site complet : apprendre python
Voir les conventions de syntaxe en python et règles de nommage
Voir la portée des variables et références
- Les variables locales définies avant l’appel d’une fonction seront accessibles, depuis le corps de la fonction, en lecture seule.
-
Une variable locale définie dans une fonction sera supprimée après l’exécution de cette fonction.
- On peut cependant appeler les attributs et méthodes d’un objet pour le modifier durablement.
- Les variables globales se définissent à l’aide du mot-clé
global
suivi du nom de la variable préalablement créée. - Les variables globales peuvent être modifiées depuis le corps d’une fonction (à utiliser avec prudence).
Pour ecrire un commentaire :
#commentaire
"""
commentaire1
commentaire2
"""
Pour afficher qqch:
print("hello")
Pour utiliser le module “builtin”:
import sys
sys.builtin_module_names
#return:
('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', '_sre', '_stat', '_string', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time', 'xxsubtype', 'zipimport')
Pour obtenir de l’aide sur ces modules:
help("math")
help("math.tan")
#ou ceci si le module est déjà importé
help(math)
# on peut ouvrir une session d'aide
help()
Sinon il est possible d’aller voir la doc officielle sur DOC.
la fonction 2to3
permet de convertir un script Python2 en Python3.
Il est possible d’envoyer calcul en string:
print("hello", 1+1)
#return
hello 2
les calcules:
8/3
#return
2.666
8//3
#return
2
8%3
#return
2
8**2
#return
64
Les variables (attention les variables sont sensibles à la case). Python est un langage où tout est Objet comme Ruby ;p :
variable = 1
variable
#return
1
variable == 1
#return
True
variable == 2
#return
False
variable != 1
#return
False
A="2"
type(A)
#return
<class 'str'>
a=2
type(a)
#return
<class 'int'>
La concatenation :
"cou" + "cou"
#return
"coucou"
A="2"
a=2
a+A
#return
Error
a+int(A)
#return
4
str(a)+A
#return
"22"
Programmation orientée objet
- Tout peut être représenté sous forme d’objets
- Un objet a un type (une classe)
- Un objet a un type parent ou pas
- Un objet a un état, une identité
- Un objet a un comportement
Pour voir les méthodes d’une classe :
dir(str)
#return
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
"hello".capitalize()
#return
'Hello'
"hello".split("e")
#return
['h','llo']
Les listes :
l=[1,"hello",[2,3]]
type(l)
#return
<class 'list'>
l[0]
#return
1
l.index("hello")
#return
1
#inserer un element à la fin de la liste
l.append("toto")
#inserer un element à l'index 0 de la liste
l.insert(0,"titi")
#retourner le dernier element de la liste puis la retire
l.pop()
Les dictionnaires :
d = {"nom": "goku", "origine": "sayan"}
d["nom"]
#return
'goku'
d["technique"] = "kamehameha"
d
#return
{"nom": "goku", "origine": "sayan", "technique": "kamehameha"}
del(d["technique"])
d
#return
{"nom": "goku", "origine": "sayan"}
Les conditions
La condition “if” (ne pas oublier l’indentation soit une tabulation) :
if d["nom"] == "goku":
print("ok", d["nom"], "!")
#ou
print("ok %s !" %d['nom'])
#ou
print("ok {0} !".format(d['nom']))
#ou rechercher le 'nom' dans le dicto directement
print("ok %(nom)s !" %d)
elif d["nom"] == "vegeta":
print("ok sayan king")
else:
print("ko")
#return
'ok goku !'
tester si var
est une instance de str
qui retourne un bool. assert
permet de tester (et renvoie une erreur si false) :
assert isinstance(var, str)
L’iteration
La boucle “for” :
for x in d:
print(x, " : ", d[x])
#return
nom : goku
origine : sayan
for x in d.values():
print(x)
#return
goku
sayan
transformer les valeurs du dictionnaire en liste :
list(d.values())
#return
['goku', 'sayan']
transformer les pair (key,value) en liste :
list(d.items())
#return
[('nom', 'goku'), ('race', 'sayan')]
obtenir directement les pair (key,value) :
for k, v in d.items():
print(k, ' : ', v)
#return
nom : goku
race : sayan
parcourir un iterable :
for x in [1,2,3,4]:
print(x)
#return
1
2
3
4
for x in range(10):
print(x)
#return
0
1
#...
9
for x in range(1, 11):
print(x)
#return
1
2
#...
10
Les fonctions
def creer_liste(taille):
return list(range(taille))
print(creer_liste(10))
#return
[0,1...9]
creer_liste(taille=10)
#return
[0,1...9]
for x in creer_liste(10)
print(x)
#return
0
1
#...
9
#creer un param par défaut
def creer_list(taille=10):
return list(range(taille))
creer_liste()
#return
[0,1...9]
#ajouter un nombre indefini de param en dico (key,value)
def creer_liste(taille=10, **d):
return d
creer_liste(taille=10, nom="goku", race="sayan")
#return
{'nom': 'goku', 'race': 'sayan'}
Les classes
# nom du fichier "fichier.py"
class VoiturePro:
type = "4x4"
def vitesse()
car = VoiturePro()
print(car.type)
#return
4x4
une classe vide :
class Moto:
"""
classe vide
"""
var = Moto()
var.annee = 2018
print(var.annee)
#return
2018
Quand il s’agit d’une méthode , le code appelant celle-ci va transmettre la référence de l’objet à la méthode. Il faut donc ajouter un paramètre à la méthode appelé self
par convention. L’instance va envoyer la référence de l’objet via self
:
class Moto:
def vitesse_max(self):
print("la vitesse maximum est de", self.vitesseMax)
var = Moto()
var.vitesseMax = 300
var.vitesse_max()
#return
'la vitesse maximum est de 300'
le constructeur :
class Moto:
#le constructeur
def __init__(self, vitesseMax, couleur):
self.vitesseMax = vitesseMax
self.couleur = couleur
def vitesse_max(self):
print("la vitesse maximum est de", self.vitesseMax)
var = Moto(300,"rouge")
la classe parent :
class Vehicule:
def carburant(self):
print("je fonctionne au caburant")
class Moto(vehicule):
#le constructeur
def __init__(self, vitesseMax, couleur):
self.vitesseMax = vitesseMax
self.couleur = couleur
def vitesse_max(self):
print("la vitesse maximum est de", self.vitesseMax)
var = Moto(300,"rouge")
var.carburant()
#return
"je fonctionne au caburant"
Gestion des fichiers et récupération des erreurs
try:
f = open('fichier.txt', 'r')
print(f.read())
except:
print("error")
finally:
#ce bloc s'executera dans tt les cas err ou pas
f.close
lire ligne par ligne avec readlines()
:
try:
f = open('fichier.txt', 'r')
for x in f.readlines():
print(x.strip()) #enleve les char retour chariot en déb et fin de ligne
except:
print("error")
finally:
#ce bloc s'executera dans tt les cas err ou pas
f.close
avoir plusieurs type d’exeptions :
try:
f = open('fichier.txt', 'r')
for x in f.readlines():
print(int(x.strip())) #enleve les char retour chariot en déb et fin de ligne
except IOError as err:
print("error de fichier", err)
except ValueError:
print("error de conversion")
except:
print("error unknow")
finally:
#ce bloc s'executera dans tt les cas err ou pas
f.close
#return
#en cas de fichier inexistant, vu que la var f n'a pas été créé, cela provoquera une err
avec le bloc with
(va fermer le fichier à la fin de son bloc dans tt les cas) :
try:
with open('fichier.txt', 'r') as f
for x in f.readlines():
print(int(x.strip())) #enleve les char retour chariot en déb et fin de ligne
except IOError as err:
print("error de fichier", err)
except ValueError:
print("error de conversion")
except:
print("error unknow")
Attention: la méthode readline
lit caractère par caractère alors que la méthode readlines
lit ligne par ligne.
Les modules et les paquets
Quand on créé un repertoire contenant plusieurs modules, on appelle cela un packaging.
dans la doc python2, il faut créér un fichier __init__.py
dans chaque packaging même s’il est vide. Plus besoin de faire ça sur python3.
les modules sont l’equivalent des header en C (.h) :
#soit le module vehicule.py
class Vehicule:
def carburant(self):
print("je fonctionne au caburant")
class Moto(vehicule):
#le constructeur
def __init__(self, vitesseMax, couleur):
self.vitesseMax = vitesseMax
self.couleur = couleur
def vitesse_max(self):
print("la vitesse maximum est de", self.vitesseMax)
puis on appelle la classe Vehicule grâce à import
:
#fichier main.py
import Vehicule
var = Vehicule.Moto(300,"rouge")
var.carburant()
#return
"je fonctionne au caburant"
Si le module vehicule.py est dans un dossier ex: “Transport”, pour l’appeller il faut :
#fichier main.py
import Transport.Vehicule
var = Transport.Vehicule.Moto(300,"rouge")
var.carburant()
#return
"je fonctionne au caburant"
Pour eviter des noms d’import à rallonge on peut utiliser le from import
:
#fichier main.py
#soit du dossier Transport on importe Vehicule
from Transport import Vehicule
var = Vehicule.Moto(300,"rouge")
var.carburant()
#return
"je fonctionne au caburant"
Ou encore mieux :
#fichier main.py
from Transport.Vehicule import Moto
var = Moto(300,"rouge")
var.carburant()
#return
"je fonctionne au caburant"
pour recuperer le répértoire courant :
import os
os.getcwd()
pour recuperer les path python (liste de chemin où python va chercher les modules) :
import sys
sys.path
Les modules tiers
le gestionnaires de paquet distribute :
- pour l’installer
pip install distribute
- pour installer simplejson :
pip install simplejson
pip3 install simplejson
Créer un script pour accéder au web :
faire une recherche google via le module python urllib
import urllib.request
import urllib.parse
import simplejson
# http://google.../q=qqch
q = urllib.parse.urlencode({ 'q' : 'wikipedia' })
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' %(q)
#print(url)
search = urllib.request.urlopen(url)
json = simplejson.loads(search.read())
print(json['responseData']['results'])
Les expressions rationnelles
import urllib.request
import urllib.parse
import simplejson
import re #regex
p = re.compile('.*youtube\.com*', re.IGNORECASE)
e = re.compile('<b>' | '</b>')
# http://google.../q=qqch
q = urllib.parse.urlencode({ 'q' : 'wikipedia' })
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' %(q)
#print(url)
search = urllib.request.urlopen(url)
json = simplejson.loads(search.read())
print(json['responseData']['results'])
for r in json ['responseData']['results']:
if p.match(r['url']):
print(e.sub(' ', r['title'], r['url']))
La BDD
MySQLdb sur python.
installer MySQL Connector python.
pip install mysqlclient
from mysql import connector
cn = connector.connect(user='toto', password='toto', host='localhost', database='mysql')
q = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES'
c = cn.cursor()
c.execute(q)
for t in c:
print(t)
cn.close()
Comments