Modifications entre les versions 1 et 2
Version 1 à la date du 2012-02-22 18:30:02
Taille: 5247
Éditeur: DavinBaragiotta
Commentaire: Amorce
Version 2 à la date du 2012-02-22 19:16:54
Taille: 6211
Éditeur: DavinBaragiotta
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]]
}}}
 
* index
{{{
l[2], d['nom']
}}}
 
* slicing
{{{
l[0:2]
}}}

{{{
personne = {'nom':'x', 'prenom':'y'}
personnes = []
}}}
Ligne 163: Ligne 186:
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 202:
        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 211:
 * if, elif, else
{{{
liste = range(6)
Ligne 190: Ligne 220:
}}}
Ligne 193: Ligne 224:
        * 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 234:
* %  * 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 245:
* 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 256:
* code/script.py
* shebang : #! /usr/bin/env python
* encoding : # -*- encoding: utf-8 -*-
* if __name__ == '__main__':
* raw_input()
 * code/script.py
 * shebang : #! /usr/bin/env python
 * encoding : # -*- encoding: utf-8 -*-
 * if __name__ == '__main__':
 * raw_input()
Ligne 220: Ligne 264:
* 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 277:
}}}
Ligne 232: Ligne 281:
* 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
}}}
Ligne 244: Ligne 296:
* __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)
Ligne 249: Ligne 301:
* 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 258: Ligne 328:
* documentation + interactivité + introspection
* scripts + modules
* enjoy!
 * documentation + interactivité + introspection
 * scripts + modules
 * enjoy!

Atelier 2012-02-23 : Python : Atelier de base


INTRODUCTION


NOTIONS DE BASE

Interpréteur

  • python, ipython
  • interactivité / introspection

$ ipython

Syntaxe

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]]
  • index

l[2], d['nom']
  • 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

  • code/script.py
  • shebang : #! /usr/bin/env python
  • encoding : # -*- encoding: utf-8 -*-
  • if name == 'main':

  • raw_input()

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

Modules

  • init.py

  • name : nom du module, nom de fichier si importé, 'main' si exécuté (utile pour tests)

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

CONCLUSION

  • documentation + interactivité + introspection
  • scripts + modules
  • enjoy!

Ateliers/2012-02-23 (dernière édition le 2012-08-27 07:04:58 par DavinBaragiotta)