Taille: 5247
Commentaire: Amorce
|
Taille: 8769
Commentaire:
|
Texte supprimé. | Texte ajouté. |
Ligne 40: | Ligne 40: |
* commentaire : # * variables : sans $ * instructions : sans ; * blocs : sans {} * style : PEP 8 http://www.python.org/dev/peps/pep-0008/ * bris de ligne : \ |
* commentaire : # * variables : sans $ * instructions : sans ; * blocs : sans {} * style : PEP 8 http://www.python.org/dev/peps/pep-0008/ * bris de ligne : \ |
Ligne 50: | Ligne 50: |
* nom, valeur, référence | * nom, valeur, référence |
Ligne 60: | Ligne 60: |
* typage dynamique (pas besoin déclarer) * import types |
* typage dynamique (pas besoin déclarer) |
Ligne 79: | Ligne 78: |
* unpacking | * unpacking |
Ligne 84: | Ligne 83: |
* fortement typé (pas de transtypage implicite) * transtypage str(), int(), float(), bool(), list(), tuple(), dict(), set() |
* fortement typé (pas de transtypage implicite) * transtypage str(), int(), float(), bool(), list(), tuple(), dict(), set() |
Ligne 93: | Ligne 92: |
http://docs.python.org/library/fonctions.html {{{ type(objet) # retourne le type de l'objet dir(objet) # retourne les noms derrière l'objet help(objet) # retourne l'aide callable(objet) # dit si un objet est appelable, exécutable... |
* http://docs.python.org/library/fonctions.html {{{ type() # retourne le type de l'objet dir() # retourne les noms derrière l'objet help() # retourne l'aide callable() # dit si un objet est appelable, exécutable... |
Ligne 118: | Ligne 117: |
* objet.attribut * objet.methode() * objet.attribut.methode() |
* objet.attribut * objet.methode() * objet.attribut.methode() |
Ligne 124: | Ligne 123: |
* variable. [+ tab] * variable? * type() * dir() * help() * exploration des types * concaténation : s1 + s2 |
* variable. [+ tab] * variable? * type() * dir() * help() * exploration des types * concaténation : s1 + s2 |
Ligne 146: | Ligne 145: |
}}} {{{ |
|
Ligne 151: | Ligne 148: |
davin = {'prenom':'Davin', 'nom':'Baragiotta'} pascal = {'prenom':'Pascal', 'nom':'Bou Nassar'} personnes = [] personnes.append(davin) personnes.append(pascal) statuts = [ (1, u'Nouveau'), (2, u'En cours'), (3, u'Rejeté'), (4, u'Retenu'), ] |
|
Ligne 155: | Ligne 166: |
* imbrication : l = [[1,2,3],[4,'salut',6],[7,8,9]] * index : l[2], d['nom'] * slicing : l[0:2] * personne = {'nom':'x', 'prenom':'y'} * personnes = [] |
* imbrication {{{ l = [[1,2,3],[4,'salut',6],[7,8,9]] d = {1611: {'nom':'Baragiotta', 'prenom':'Davin'}, 123: {'nom':'Bou Nassar', 'prenom':'Pascal'}} }}} * index {{{ l[2], d[1611] }}} * slicing {{{ l[0:2] }}} {{{ personne = {'nom':'x', 'prenom':'y'} personnes = [] }}} |
Ligne 163: | Ligne 187: |
for item in l: print item.upper() * while... while year < 2005: for 2 à la puissance n sur string sur list |
* while {{{ annee = 2012 while annee <= 2015: print annee annee = annee + 1 # annee += 1 }}} * for {{{ for i in range(2012, 2016): print i }}} |
Ligne 174: | Ligne 203: |
false = 0, '', (), [], {}, None and, or, not < > <= >= == != x < y <= z is, is not in, not in % |
* false = 0, "", (), [], {}, None * and, or, not * < > <= >= == != * x < y <= z * is, is not * in, not in |
Ligne 184: | Ligne 212: |
* if, elif, else {{{ liste = range(6) |
|
Ligne 190: | Ligne 221: |
}}} | |
Ligne 193: | Ligne 225: |
* read files : open(), f.close() for line in open(‘hello.py’): print line, readlines |
* ouvrir, manipuler, fermer {{{ f = open('texte.txt') for line in f.readlines(): print line, f.close() }}} |
Ligne 200: | Ligne 235: |
* % | * substitution : % {{{ for n in range(10): print "La puissance 2 de %d est : %d" % (n, n**2) for p in personnes: print "Bonjour %s %s" % (p['prenom'], p['nom'].upper()) }}} |
Ligne 204: | Ligne 246: |
* cible = 'egypte' * contexte = [ligne for ligne in f.readlines() if cible in ligne] l = [l for l in liste if l.startswith('#')] |
* créer une liste à partir d'un itérable avec un "one-liner" {{{ cible = 'egypte' contexte = [ligne for ligne in f.readlines() if cible in ligne] commentaires = [ligne for ligne in f.readlines() if l.startswith('#')] }}} |
Ligne 212: | Ligne 257: |
* code/script.py * shebang : #! /usr/bin/env python * encoding : # -*- encoding: utf-8 -*- * if __name__ == '__main__': * raw_input() |
{{{ # ! /usr/bin/env python # -*- encoding: utf-8 -*- def coucou(nom): return u"Coucou %s!" % (nom,) if __name__ == '__main__': print u"--------------------------------------------------" print u"DÉBUT du script" print u"--------------------------------------------------" nom = raw_input("Quel est votre nom? ") print coucou(nom) print u"-----------------------------------------------" print u"FIN du script" print u"-------------------------------------------------" }}} * shebang : #! /usr/bin/env python * encoding : # -*- encoding: utf-8 -*- {{{ if __name__ == '__main__': }}} * raw_input() * créer un répertoire '''projet/annuaire''' * créer dans ce répertoire un script Python nommé '''form.py''' qui demande à l'utilisateur son nom, prénom et année de naissance |
Ligne 220: | Ligne 286: |
* convention de nommage * output : None par défaut * input : paramètres positionnels, nommés, *args, **kwargs * portée des variables def ma_fonction(param1, param2, *args, **kwargs): |
* convention de nommage * output : None par défaut * input : paramètres positionnels, nommés, *args, **kwargs * portée des variables {{{ def age(annee_naissance): return 2012 - annee_naissance def ma_fonction(param1, param2, param3=None, param4=0, *args, **kwargs): |
Ligne 229: | Ligne 299: |
}}} | |
Ligne 232: | Ligne 303: |
* import module * from module import nom * from module import nom as mon_nom * built-in : pas besoin d'import * standard library (shipped in) : import sans install * packages : importable si installé dans le path $ import sys $ sys.path |
* import module * from module import nom * from module import nom as mon_nom * built-in : pas besoin d'import * standard library (shipped in) : import sans install * packages : importable si installé dans le path {{{ import sys sys.path }}} * dans le répertoire '''projet/annuaire''', créer un script Python nommé '''lib.py''' * déclarer la fonction '''age''' dans ce script * dans ipython, s'assurer d'être dans '''projet/annuaire''' puis tester l'import de la fonction {{{ import lib mon_annee_naissance = 1975 lib.age(mon_annee_naissance) }}} * améliorer '''form.py''' en saluant le user qui a rempli le form et en lui donnant son âge |
Ligne 244: | Ligne 328: |
* __init__.py * __name__ : nom du module, nom de fichier si importé, '__main__' si exécuté (utile pour tests) |
* {{{__init__.py}}} * {{{__name__}}} : nom du module, nom de fichier si importé, {{{'__ main __'}}} si exécuté (utile pour tests) * ajouter un fichier {{{__init__.py}}} dans le répertoire '''projet/annuaire''' pour le convertir en module * créer un fichier '''tests.py''' à la racine du répertoire '''projet/''' (suite de tests) * importer la fonction age dans '''tests.py''' pour la tester |
Ligne 249: | Ligne 336: |
* fichiers * sérialisation : import pickle * DB : sqlite3, mysqldb, psycopg2 * ORM : sqlalchemy |
* fichiers * sérialisation : import pickle {{{ import pickle f = open('pickles', 'w') pickle.dump(statuts, f) pickle.dump(personnes, f) f.close() exit() import pickle f = open('pickles') objets = [] for obj in pickle.load(f): objets.append(obj) f.close() }}} * DB : sqlite3, mysqldb, psycopg2 * ORM : sqlalchemy |
Ligne 256: | Ligne 361: |
=== Objectif === Créer un script 'actualites' qui retournera les 5 dernières actualités affichées sur le site institutionnel de l'AUF : http://www.auf.org/flux/actualite/ === Approche === 1. utiliser python-feedparser * sudo apt-get install python-feedparser 2. lancer interpréteur et suivre exemple de la doc : * ipython * http://feedparser.org/ 3. introspecter (et imprimer dictionnaire pour voir ses clés) au besoin 4. coder un script qui fera le traitement voulu * à partir du modèle code/script.py 5. lancer le script dans l'interpréteur pour confirmer son exécution correcte 6. servir froid === Algorithme === * capter le flux RSS de www.auf.org * retenir le nombre d'items voulus * traiter les items retenus : * créer une chaîne de caractères unique avec les infos des derniers items modifiés === Solution === Des solutionnaires à cet exercice vous sont présentés dans : exercice-solutions.txt Pour info, la solution ne fait que 8 lignes Python. |
|
Ligne 258: | Ligne 403: |
* documentation + interactivité + introspection * scripts + modules * enjoy! |
* documentation + interactivité + introspection * scripts + modules * enjoy! |
Atelier 2012-02-23 : Python : Atelier de base
Sommaire
-
Atelier 2012-02-23 : Python : Atelier de base
- INTRODUCTION
-
NOTIONS DE BASE
- Interpréteur
- Syntaxe
- Variables
- Types
- Built-in : fonctions built-in et structure du langage
- Objets et namespaces
- Introspection
- Conteneurs
- Itération
- Comparaisons et opérateurs logiques
- Conditionnel
- Fichiers
- Formattage de chaînes de caractères
- Compréhension de liste
- Scripts
- Fonctions
- Import
- Modules
- Permanence de l'information
- EXERCICE
- CONCLUSION
INTRODUCTION
- Objectifs :
- coder dans l'interpréteur et explorer les bases du langage
- écrire un script qu'on fera exécuter par l'interpréteur
- Documentation
- Environnement
- éditeur texte
- interpréteur python : python, ipython
- sources :
NOTIONS DE BASE
Interpréteur
- python, ipython
- interactivité / introspection
$ ipython
Syntaxe
- commentaire : #
- variables : sans $
- instructions : sans ;
- blocs : sans {}
- style : PEP 8
- bris de ligne : \
Variables
- nom, valeur, référence
a = 12 b = a id(a) id(b)
Types
- typage dynamique (pas besoin déclarer)
n = None # NoneType : type spécial voulant dire... rien b = True # bool : booléen... True ou False n'oubliez pas les majuscules i = 15 # int : entier f = 15.5 # float : décimal s = "chaine" # str : chaine de caractère, instancié avec "" ou '' u = u"chaîne" # unicode : chaîne de caractère unicode, instancié avec u"" ou u'' l = [] # list : liste d'objets (ordonné) t = () # tuple : liste immuable d'objets d = {} # dict : dictionnaire de données (unique, non-ordonné) ens = set([]) # set : ensemble (unique, non-ordonné)
- unpacking
a, b = 34, 56
- fortement typé (pas de transtypage implicite)
- transtypage str(), int(), float(), bool(), list(), tuple(), dict(), set()
float(a)
Built-in : fonctions built-in et structure du langage
type() # retourne le type de l'objet dir() # retourne les noms derrière l'objet help() # retourne l'aide callable() # dit si un objet est appelable, exécutable... bool(), int(), str()... # initialisation ou transtypage getattr() isinstance(objet, Type) # teste le classe (ou type) d'un objet issubclass() super() len() min() max() open() range() raw_input() print del
Objets et namespaces
- objet.attribut
- objet.methode()
- objet.attribut.methode()
Introspection
- variable. [+ tab]
- variable?
- type()
- dir()
- help()
- exploration des types
- concaténation : s1 + s2
nom = "Davin Baragiotta" prenom, nom = nom.split() nom.upper() nom.lower() nom.ljust(30) nom = [prenom.lower(), nom.lower()] username = ".".join(nom) nom = "Davin Baragiotta" username = ".".join(nom.split()).lower() users = [] users.append(username) davin = {'prenom':'Davin', 'nom':'Baragiotta'} pascal = {'prenom':'Pascal', 'nom':'Bou Nassar'} personnes = [] personnes.append(davin) personnes.append(pascal) statuts = [ (1, u'Nouveau'), (2, u'En cours'), (3, u'Rejeté'), (4, u'Retenu'), ]
Conteneurs
- imbrication
l = [[1,2,3],[4,'salut',6],[7,8,9]] d = {1611: {'nom':'Baragiotta', 'prenom':'Davin'}, 123: {'nom':'Bou Nassar', 'prenom':'Pascal'}}
- index
l[2], d[1611]
- slicing
l[0:2]
personne = {'nom':'x', 'prenom':'y'} personnes = []
Itération
- while
annee = 2012 while annee <= 2015: print annee annee = annee + 1 # annee += 1
- for
for i in range(2012, 2016): print i
Comparaisons et opérateurs logiques
- false = 0, "", (), [], {}, None
- and, or, not
< > <= >= == !=
x < y <= z
- is, is not
- in, not in
Conditionnel
- if, elif, else
liste = range(6) if 5 in liste: print 'hourra 5' elif 4 in liste: print 'hourra 4' else: print 'pas hourra'
Fichiers
- ouvrir, manipuler, fermer
f = open('texte.txt') for line in f.readlines(): print line, f.close()
Formattage de chaînes de caractères
- substitution : %
for n in range(10): print "La puissance 2 de %d est : %d" % (n, n**2) for p in personnes: print "Bonjour %s %s" % (p['prenom'], p['nom'].upper())
Compréhension de liste
- créer une liste à partir d'un itérable avec un "one-liner"
cible = 'egypte' contexte = [ligne for ligne in f.readlines() if cible in ligne] commentaires = [ligne for ligne in f.readlines() if l.startswith('#')]
Scripts
# ! /usr/bin/env python # -*- encoding: utf-8 -*- def coucou(nom): return u"Coucou %s!" % (nom,) if __name__ == '__main__': print u"--------------------------------------------------" print u"DÉBUT du script" print u"--------------------------------------------------" nom = raw_input("Quel est votre nom? ") print coucou(nom) print u"-----------------------------------------------" print u"FIN du script" print u"-------------------------------------------------"
- shebang : #! /usr/bin/env python
- encoding : # -*- encoding: utf-8 -*-
if __name__ == '__main__':
- raw_input()
créer un répertoire projet/annuaire
créer dans ce répertoire un script Python nommé form.py qui demande à l'utilisateur son nom, prénom et année de naissance
Fonctions
- convention de nommage
- output : None par défaut
- input : paramètres positionnels, nommés, *args, **kwargs
- portée des variables
def age(annee_naissance): return 2012 - annee_naissance def ma_fonction(param1, param2, param3=None, param4=0, *args, **kwargs): """Ceci est ma fonction.""" output = True return output
Import
- import module
- from module import nom
- from module import nom as mon_nom
- built-in : pas besoin d'import
- standard library (shipped in) : import sans install
- packages : importable si installé dans le path
import sys sys.path
dans le répertoire projet/annuaire, créer un script Python nommé lib.py
déclarer la fonction age dans ce script
dans ipython, s'assurer d'être dans projet/annuaire puis tester l'import de la fonction
import lib mon_annee_naissance = 1975 lib.age(mon_annee_naissance)
améliorer form.py en saluant le user qui a rempli le form et en lui donnant son âge
Modules
__init__.py
__name__ : nom du module, nom de fichier si importé, '__ main __' si exécuté (utile pour tests)
ajouter un fichier __init__.py dans le répertoire projet/annuaire pour le convertir en module
créer un fichier tests.py à la racine du répertoire projet/ (suite de tests)
importer la fonction age dans tests.py pour la tester
Permanence de l'information
- fichiers
- sérialisation : import pickle
import pickle f = open('pickles', 'w') pickle.dump(statuts, f) pickle.dump(personnes, f) f.close() exit() import pickle f = open('pickles') objets = [] for obj in pickle.load(f): objets.append(obj) f.close()
- DB : sqlite3, mysqldb, psycopg2
- ORM : sqlalchemy
EXERCICE
Objectif
Créer un script 'actualites' qui retournera les 5 dernières actualités affichées sur le site institutionnel de l'AUF : http://www.auf.org/flux/actualite/
Approche
1. utiliser python-feedparser
- sudo apt-get install python-feedparser
2. lancer interpréteur et suivre exemple de la doc :
- ipython
3. introspecter (et imprimer dictionnaire pour voir ses clés) au besoin
4. coder un script qui fera le traitement voulu
- à partir du modèle code/script.py
5. lancer le script dans l'interpréteur pour confirmer son exécution correcte
6. servir froid
Algorithme
- capter le flux RSS de www.auf.org
- retenir le nombre d'items voulus
- traiter les items retenus :
- créer une chaîne de caractères unique
- avec les infos des derniers items modifiés
- créer une chaîne de caractères unique
Solution
Des solutionnaires à cet exercice vous sont présentés dans : exercice-solutions.txt
Pour info, la solution ne fait que 8 lignes Python.
CONCLUSION
- documentation + interactivité + introspection
- scripts + modules
- enjoy!