Introduction au langage Python

Créateur du langage : Guido Van Rossum

Carl Chenet Install-Party Jussieu 2005

Un rapide historique

• 1982-1986. Guido van Rossum travaille sur un langage appelé

ABC au Centrum voor Wiskunde en Informatica (CWI), Hollande.

• 1981-1991 : Pour les besoins d'un projet, GvR va développer un langage

de script qui reprend de nombreuses idées au projet ABC.

• Décembre 1989. GvR se lance dans la réalisation d'un langage

descendant d'ABC qui pourraient plaire aux fans d'Unix et de C.

Le nom Python est choisi.

• 1991: Version officielle 0.9.0 de Python, sous la tutelle du CWI.

• 2001 : Version 2.1 de Python, qui dépend dorénavant de la Python

Software Foundation, crée par GvR sous licence Open Source.

http://www.python.org/psf/

• 2003 : Version 2.3 de Python.

• 2004 : Version 2.4 de Python.

Qui utilise Python ?

• Google, entre autre pour le back-end de nombreuses applications

web comme Gmail.

• Gnome, l'environnement de bureau, pour de nombreuses interfaces

graphiques à l'aide du toolkit GTK (voir slide plus loin).

• Wikipedia, pour un framework qui lui permet de créer des webbots.

• BitTorrent, pour l'implémentation originale et de nombreux clones.

• Portage, le coeur de la distribution Gentoo (www.gentoo.org).

Un système avancé de gestion de packages semblable au système des

ports des *BSD.

Caractéristiques générales de Python

• Python est un langage interprété et interactif.

Caractéristiques générales de Python

• Python est un langage interprété et interactif.

‣ Possibilité (très utile) de lancer un interpréteur interactif.

chaica@desktop chaica $ python

Python 2.4 (#1, Jan 10 2005, 22:28:10)

[GCC 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r3, propolice)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> 2 + 2

4

>>> print 'Merci bien!'

Merci bien!

>>> (ctrl-D pour interrompre)

Caractéristiques générales de Python

• Python est un langage interprété et interactif.

‣ Possibilité (très utile) de lancer un interpréteur interactif.

• Python est un langage de haut niveau.

‣ Pas de gestion manuelle de la mémoire.

‣ Il est proposé avec une libraire standard importante.

Caractéristiques générales de Python

• Python est un langage interprété et interactif.

‣ Possibilité (très utile) de lancer un interpréteur interactif.

• Python est un langage de haut niveau.

‣ Pas de gestion manuelle de la mémoire.

‣ Il est proposé avec une libraire standard importante.

• Tout est “objet” (reste à définir ce qu'est un objet pour Python).

‣ Un objet au sens Python est une donnée dotée d'une identité, d'un

type et d'une valeur. Il n'y a pas d'exception à cette règle.

• Python est un langage typé dynamiquement mais fortement typé.

Caractéristiques générales de Python

• Python est un langage interprété et interactif.

‣ Possibilité (très utile) de lancer un interpréteur interactif.

• Python est un langage de haut niveau.

‣ Pas de gestion manuelle de la mémoire.

‣ Il est proposé avec une libraire standard importante.

• Tout est “objet” (reste à définir ce qu'est un objet pour Python).

‣ Un objet au sens Python est une donnée dotée d'une identité, d'un

type et d'une valeur. Il n'y a pas d'exception à cette règle.

• Python est un langage typé dynamiquement mais fortement typé.

• Python est dotée d'une documentation claire, efficace et remplie

d'exemples. Elle est accessible via Internet ou téléchargeable.

http://www.python.org/doc/

“Détails” d'importance

• En Python, vous n'avez pas de délimiteurs de blocs. On utilise

le caractère ':' et l'indentation. En effet l'indentation est

obligatoire, et non plus une question de style.

“Détails” d'importance

• En Python, vous n'avez pas de délimiteurs de blocs. On utilise

le caractère ':' et l'indentation. En effet l'indentation est

obligatoire, et non plus une question de style.

• Pas de délimiteurs de fin d'instruction , comme ';' en langage C.

Il suffit d'aller à la ligne. Un caractère spécial permet de

de continuer une instruction sur plusieurs lignes.

“Détails” d'importance

• En Python, vous n'avez pas de délimiteurs de blocs. On utilise

le caractère ':' et l'indentation. En effet l'indentation est

obligatoire, et non plus une question de style.

• Pas de délimiteurs de fin d'instruction , comme ';' en langage C.

Il suffit d'aller à la ligne. Un caractère spécial permet de

de continuer une instruction sur plusieurs lignes.

• Conséquence directe : réduction drastique des erreurs de syntaxe

pour les débutants.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

La commande indique l'emplacement de l'interpréteur Python sur la machine.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

Nous importons deux modules dont nous allons nous

servir immédiatement plus bas.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

Opérateur for ... in ... qui permet le parcours d'une liste. Il existe donc un type LISTE. Fichier est quant à lui de type CHAÎNE.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

Ici la liste sys.argv qui contient les arguments passés en ligne de commande. Extension est une CHAÎNE.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

Si la fin du nom du fichier contient le nom de l'extension, alors on affiche le nom du fichier.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

• Premières remarques :

‣ Lisibilité du code. L'indentation permet une découpe claire du code, qui

se retrouve forcément d'un programme à l'autre. La normalisation

de l'indentation est une bonne chose pour l'évolution et la maintenance

des programmes python.

Trêve de théorie, un peu de pratique.

• Efforçons-nous d'entrer directement dans le vif du sujet avec un

programme utile qui montre quelques possibilités du langage :

#!/usr/bin/python

import sys

import os

class TrouveExtension ( object ):

def __init__( self ) :

for fichier in os.listdir( '.' ) :

for extension in sys.argv :

if fichier[ ( len( fichier )-len( extension) ) : ] == extension :

print fichier

if __name__ == '__main__' :

TrouveExtension()

• Premières remarques :

‣ Lisibilité du code. L'indentation permet une découpe claire du code, qui

se retrouve forcément d'un programme à l'autre. La normalisation

de l'indentation est une bonne chose pour l'évolution et la maintenance

des programmes python.

‣ Nous avons introduit ici deux types de Python : les listes et les chaînes.

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java.

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

>>> sentence[0:13]

'life is short'

>>> sentence[15:]

'use python'

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

>>> sentence[0:13]

'life is short'

>>> sentence[15:]

'use python'

• Le type 'chaîne' bénéficie de nombreuses méthodes :

>>> sentence.split()

['life', 'is', 'short,', 'use', 'python']

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

>>> sentence[0:13]

'life is short'

>>> sentence[15:]

'use python'

• Le type 'chaîne' bénéficie de nombreuses méthodes :

>>> sentence.split()

['life', 'is', 'short,', 'use', 'python']

>>> sentence.find ('is')

5

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

>>> sentence[0:13]

'life is short'

>>> sentence[15:]

'use python'

• Le type 'chaîne' bénéficie de nombreuses méthodes :

>>> sentence.split()

['life', 'is', 'short,', 'use', 'python']

>>> sentence.find ('is')

5

>>> 'IRC WARLORDZ STYLE!'.lower()

'irc warlordz style!'

Les chaînes (1)

• Les chaînes sont le type pour la manipulation des caractères. Pas

de type 'caractère' comme en C ou en Java. :

>>> sentence = 'life is short, use python'

>>> phrase = "le python c'est bon mangez-en"

>>> sentence + ' ' +phrase

"life is short, use python le python c'est bon mangez-en"

>>> sentence[0]

'l'

>>> sentence[0:13]

'life is short'

>>> sentence[15:]

'use python'

• Le type 'chaîne' bénéficie de nombreuses méthodes :

>>> sentence.split()

['life', 'is', 'short,', 'use', 'python']

>>> sentence.find ('is')

5

>>> 'IRC WARLORDZ STYLE!'.lower()

'irc warlordz style!'

>>> sentence.replace( ' ', '*' )

'life*is*short,*use*python'

Les chaînes (2)

• Le type chaîne est un type non modifiable (immutable). En effet

si vous tentez de modifier une partie de la chaîne, vous obtiendez

l'erreur suivante :

>>> chaine = 'salut'

>>> chaine[0] = 's'

Traceback (most recent call last):

File "<stdin>", line 1, in ?

TypeError: object does not support item assignment

Les listes (1)

• Les listes sont un type dit 'conteneur'. Elles peuvent stocker des	données de plusieurs types différents.

>>> maliste = ['salut' , 'la' , 'compagnie' , 1 , 2 ]

>>> type( maliste[0] )

<type 'str'>

>>> type( maliste[-1] )

<type 'int'>

Les listes (1)

• Les listes sont un type dit 'conteneur'. Elles peuvent stocker des	données de plusieurs types différents.

>>> maliste = ['salut' , 'la' , 'compagnie' , 1 , 2 ]

>>> type( maliste[0] )

<type 'str'>

>>> type( maliste[-1] )

<type 'int'>

• L'accès aux différents éléments se fait comme pour les chaînes.

La concaténation et la multiplication restent possible.

De nombreuses méthodes sont disponibles pour les manipulations.

>>> maliste

['salut', 'la', 'compagnie', 1, 2]

>>> maliste.remove( 'la' )

>>> maliste

['salut', 'compagnie', 1, 2]

Les listes (1)

• Les listes sont un type dit 'conteneur'. Elles peuvent stocker des	données de plusieurs types différents.

>>> maliste = ['salut' , 'la' , 'compagnie' , 1 , 2 ]

>>> type( maliste[0] )

<type 'str'>

>>> type( maliste[-1] )

<type 'int'>

• L'accès aux différents éléments se fait comme pour les chaînes.

La concaténation et la multiplication restent possible.

De nombreuses méthodes sont disponibles pour les manipulations.

>>> maliste

['salut', 'la', 'compagnie', 1, 2]

>>> maliste.remove( 'la' )

>>> maliste

['salut', 'compagnie', 1, 2]

>>> maliste.append( 'la' )

>>> maliste

['salut', 'compagnie', 1, 2, 'la']

Les listes (1)

• Les listes sont un type dit 'conteneur'. Elles peuvent stocker des	données de plusieurs types différents.

>>> maliste = ['salut' , 'la' , 'compagnie' , 1 , 2 ]

>>> type( maliste[0] )

<type 'str'>

>>> type( maliste[-1] )

<type 'int'>

• L'accès aux différents éléments se fait comme pour les chaînes.

La concaténation et la multiplication restent possible.

De nombreuses méthodes sont disponibles pour les manipulations.

>>> maliste

['salut', 'la', 'compagnie', 1, 2]

>>> maliste.remove( 'la' )

>>> maliste

['salut', 'compagnie', 1, 2]

>>> maliste.append( 'la' )

>>> maliste

['salut', 'compagnie', 1, 2, 'la']

>>> maliste.reverse()

>>> maliste

['la', 2, 1, 'compagnie', 'salut']

Les listes (2)

• De nombreuses fonctions renvoient des listes, comme os.listdir() ou	sys.argv que nous avons vu plus tôt :

>>> range(1,10)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> 'Debian rules!'.split()

['Debian', 'rules!']

Les listes (2)

• De nombreuses fonctions renvoient des listes, comme os.listdir() ou	sys.argv que nous avons vu plus tôt :

>>> range(1,10)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> 'Debian rules!'.split()

['Debian', 'rules!']

• Pour les listes comme pour les chaînes, l'opérateur if ... in permet

un test d'appartenance.

>>> maliste

['la', 2, 1, 'compagnie', 'salut']

>>> if 'la' in maliste :

... print 'ok'

...

ok

Les listes (2)

• De nombreuses fonctions renvoient des listes, comme os.listdir() ou	sys.argv que nous avons vu plus tôt :

>>> range(1,10)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> 'Debian rules!'.split()

['Debian', 'rules!']

• Pour les listes comme pour les chaînes, l'opérateur if ... in permet

un test d'appartenance.

>>> maliste

['la', 2, 1, 'compagnie', 'salut']

>>> if 'la' in maliste :

... print 'ok'

...

ok

• La liste est un type modifiable (mutable). En effet on peut modifier	chacun des membres d'une liste.

>>> maliste

['la', 2, 1, 'compagnie', 'salut']

>>> maliste[0] = 'au revoir!'

>>> maliste

['au revoir!', 2, 1, 'compagnie', 'salut'

Les listes (3)

• Soulignons l'importance de l'écriture suivante qui permet	d'écourter les instructions :

>>> maliste = 'bonjour tout le monde'.split()

>>> maliste[0]

'bonjour'

>>> maliste[0][0]

'b'

Les listes (3)

• Soulignons l'importance de l'écriture suivante qui permet	d'écourter les instructions :

>>> maliste = 'bonjour tout le monde'.split()

>>> maliste[0]

'bonjour'

>>> maliste[0][0]

'b'

ou

>>> 'bonjour tout le monde'.split()[0][0]

'b'

Aperçu des autres types de Python

• Le Python propose d'autres types que nous allons évoquer brièvement

évoquer maintenant :

Aperçu des autres types de Python

• Le Python propose d'autres types que nous allons évoquer brièvement

évoquer maintenant :

• Le tuple est un type proche de la liste mais qui est non modifiable et	qui ne propose pas de méthodes. Ces avantages sont un accès rapide	aux données en lecture et la protection qu'offre un type non	modifiable.

>>> monTuple = ('bonjour', 'a' , 'vous' )

>>> monTuple[0]

'bonjour'

>>> monTuple[0] = 'python'

Traceback (most recent call last):

File "<stdin>", line 1, in ?

TypeError: object does not support item assignment

Aperçu des autres types de Python

• Le Python propose d'autres types que nous allons évoquer brièvement

évoquer maintenant :

• Le tuple est un type proche de la liste mais qui est non modifiable et	qui ne propose pas de méthodes. Ces avantages sont un accès rapide	aux données en lecture et la protection qu'offre un type non	modifiable.

>>> monTuple = ('bonjour', 'a' , 'vous' )

>>> monTuple[0]

'bonjour'

>>> monTuple[0] = 'python'

Traceback (most recent call last):

File "<stdin>", line 1, in ?

TypeError: object does not support item assignment

• Le dictionnaire est un type qui met en relation une clé et une valeur. La	clé peut être numérique ou une chaîne, de même pour la valeur.

>>> dico = { 'serveur' : '192.168.1.1' , 'routeur' : '192.168.1.2'}

>>> dico['serveur']

'192.168.1.1'

>>> dico.keys()

['routeur', 'serveur']

>>> dico.values()

['192.168.1.2', '192.168.1.1']

Les exceptions en Python

• Comme dans tous langages modernes, on doit abuser des exceptions en	Python, en particulier dans tout ce qui est appel-système comme la	lecture d'un fichier :

import sys

class PyCat :

def __init__ ( self ) :

lines = ''

try :

for line in file ( sys.argv [ 1 ] , 'r' ) :

lines += line

except IOError , msg :

print msg

else :

print lines

if __name__ == '__main__' :

PyCat ()

$ ./pyCat.py parlotes.txt

Bonjour à vous!

Merci d'assister à cette conférence!

$ chmod -r parlotes.txt

$ ./pyCat.py parlotes.txt

[Errno 13] Permission denied: 'parlotes.txt'

Les exceptions en Python

• Comme dans tous langages modernes, on doit abuser des exceptions en	Python, en particulier dans tout ce qui est appel-système comme la	lecture d'un fichier :

import sys

class PyCat :

def __init__ ( self ) :

lines = ''

try :

for line in file ( sys.argv [ 1 ] , 'r' ) :

lines += line

except IOError , msg :

print msg

else :

print lines

if __name__ == '__main__' :

PyCat ()

$ ./pyCat.py parlotes.txt

Bonjour à vous!

Merci d'assister à cette conférence!

$ chmod -r parlotes.txt

$ ./pyCat.py parlotes.txt

[Errno 13] Permission denied: 'parlotes.txt'

Le bloc try ... except entoure les blocs

d'instructions susceptibles d'émettre des

exceptions. IOError est l'exception attendu.

Msg est le message émis par l'exception.

Les exceptions en Python

• Comme dans tous langages modernes, on doit abuser des exceptions en	Python, en particulier dans tout ce qui est appel-système comme la	lecture d'un fichier :

import sys

class PyCat :

def __init__ ( self ) :

lines = ''

try :

for line in file ( sys.argv [ 1 ] , 'r' ) :

lines += line

except IOError , msg :

print msg

else :

print lines

if __name__ == '__main__' :

PyCat ()

$ ./pyCat.py parlotes.txt

Bonjour à vous!

Merci d'assister à cette conférence!

$ chmod -r parlotes.txt

$ ./pyCat.py parlotes.txt

[Errno 13] Permission denied: 'parlotes.txt'

Le bloc try ... except entoure les blocs

d'instructions susceptibles d'émettre des

exceptions. IOError est l'exception attendu.

msg est le message émis par l'exception.

Le message contenu dans msg.

L'héritage en Python (1)

• Python supporte la hiérarchisation des classes avec l'héritage multiple.

• Ici un exemple d'héritage simple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

self.chaine = 'je suis une chaine heritee de bonjour.'

def afficheHeritage ( self ) :

print 'Ceci est une methode heritee.'

class ExempleHeritage ( AfficheBonjour ):

def __init__( self ) :

AfficheBonjour.__init__( self )

print 'Ceci est le constructeur de la classe principale.'

self.afficheHeritage ()

print self.chaine

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Ceci est le constructeur de la classe principale.

Ceci est une methode heritee.

je suis une chaine heritee de bonjour.

L'héritage en Python (1)

• Python supporte la hiérarchisation des classes avec l'héritage multiple.

• Ici un exemple d'héritage simple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

self.chaine = 'je suis une chaine heritee de bonjour.'

def afficheHeritage ( self ) :

print 'Ceci est une methode heritee.'

class ExempleHeritage ( AfficheBonjour ):

def __init__( self ) :

AfficheBonjour.__init__( self )

print 'Ceci est le constructeur de la classe principale.'

self.afficheHeritage ()

print self.chaine

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Ceci est le constructeur de la classe principale.

Ceci est une methode heritee.

je suis une chaine heritee de bonjour.

Ici le constructeur de la classe principale.

L'héritage en Python (1)

• Python supporte la hiérarchisation des classes avec l'héritage multiple.

• Ici un exemple d'héritage simple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

self.chaine = 'je suis une chaine heritee de bonjour.'

def afficheHeritage ( self ) :

print 'Ceci est une methode heritee.'

class ExempleHeritage ( AfficheBonjour ):

def __init__( self ) :

AfficheBonjour.__init__( self )

print 'Ceci est le constructeur de la classe principale.'

self.afficheHeritage ()

print self.chaine

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Ceci est le constructeur de la classe principale.

Ceci est une methode heritee.

je suis une chaine heritee de bonjour.

Ici le constructeur de la classe héritée.

L'héritage en Python (2)

• Un exemple d'héritage multiple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

class AfficheBonsoir:

def __init__ ( self ):

print 'Bonsoir bonsoir !'

class ExempleHeritage ( AfficheBonjour , AfficheBonsoir ):

def __init__( self ) :

AfficheBonjour.__init__( self )

AfficheBonsoir.__init__( self )

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Bonsoir bonsoir !

L'héritage en Python (2)

• Un exemple d'héritage multiple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

class AfficheBonsoir:

def __init__ ( self ):

print 'Bonsoir bonsoir !'

class ExempleHeritage ( AfficheBonjour , AfficheBonsoir ):

def __init__( self ) :

AfficheBonjour.__init__( self )

AfficheBonsoir.__init__( self )

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Bonsoir bonsoir !

On hérite simultanément à partir

de deux classes distinctes.

L'héritage en Python (2)

• Un exemple d'héritage multiple :

class AfficheBonjour:

def __init__ ( self ):

print 'Bonjour tout le monde!'

class AfficheBonsoir:

def __init__ ( self ):

print 'Bonsoir bonsoir !'

class ExempleHeritage ( AfficheBonjour , AfficheBonsoir ):

def __init__( self ) :

AfficheBonjour.__init__( self )

AfficheBonsoir.__init__( self )

if __name__ == '__main__' :

ExempleHeritage ()

Bonjour tout le monde!

Bonsoir bonsoir !

On appelle séquentiellement le constructeur de

chacune des deux classes héritées.

Communication par socket en Python

• L'établissement d'un modèle client-serveur en Python est très simple :

# Echo server program

import socket

HOST = ''

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.bind ( ( HOST, PORT ) )

s.listen ( 1 )

conn, addr = s.accept ()

print 'Connected by', addr

data = conn.recv ( 1024 )

print data

conn.close ()

# Echo client program

import socket

HOST = '127.0.0.1'

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.connect ( ( HOST, PORT ) )

s.send ( 'Hello, world' )

s.close ()

Communication par socket en Python

• L'établissement d'un modèle client-serveur en Python est très simple :

# Echo server program

import socket

HOST = ''

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.bind ( ( HOST, PORT ) )

s.listen ( 1 )

conn, addr = s.accept ()

print 'Connected by', addr

data = conn.recv ( 1024 )

print data

conn.close ()

# Echo client program

import socket

HOST = '127.0.0.1'

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.connect ( ( HOST, PORT ) )

s.send ( 'Hello, world' )

s.close ()

Ici le programme serveur.

Communication par socket en Python

• L'établissement d'un modèle client-serveur en Python est très simple :

# Echo server program

import socket

HOST = ''

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.bind ( ( HOST, PORT ) )

s.listen ( 1 )

conn, addr = s.accept ()

print 'Connected by', addr

data = conn.recv ( 1024 )

print data

conn.close ()

# Echo client program

import socket

HOST = '127.0.0.1'

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.connect ( ( HOST, PORT ) )

s.send ( 'Hello, world' )

s.close ()

Ici le programme client.

Communication par socket en Python

• L'établissement d'un modèle client-serveur en Python est très simple :

# Echo server program

import socket

HOST = ''

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.bind ( ( HOST, PORT ) )

s.listen ( 1 )

conn, addr = s.accept ()

print 'Connected by', addr

data = conn.recv ( 1024 )

print data

conn.close ()

# Echo client program

import socket

HOST = '127.0.0.1'

PORT = 49851

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )

s.connect ( ( HOST, PORT ) )

s.send ( 'Hello, world' )

s.close ()

• Il est aussi possible très simplement de faire passer des informations à	travers une connexion SSL entre client et serveur.

Programmation d'interface graphique en Python (1)

• Il est possible d'écrire très simplement des interfaces graphiques avec le module Tkinter:

from Tkinter import *

fen1 = Tk ( 'helloWorld' )

tex1 = Label ( fen1 , text = 'Hello World !' , fg = 'black' )

tex1.pack ()

bou1 = Button ( fen1 , text = 'End' , command = fen1.destroy )

bou1.pack ()

fen1.mainloop ()

• Toutefois des projets proposent des wrappers Python avec des	interfaces graphiques comme GTK2 ou wxWidgets.

Programmation d'interface graphique en Python (2)

Projet BloGTK

réalisé en pyGTK.

http://blogtk.sourceforge.net

Bibliographie

• Quelques ouvrages de référence et les liens Internet qui m'ont permis	de	réaliser cette présentation :

‣ Introduction à Python, de Lutz et Ascher, chez O'Reilly.

‣ Dive into Python, de Mark Pilgrim chez Paperback.

‣ Python Cookbook, de Martelli et Ascher, chez O'Reilly.

‣ Documentation Python : http://www.python.org/doc/current/

‣ Interviews données par GvR : http://www.python.org/~guido/interviews.html

‣ Article sur GvR et Python de l'encyclopédie libre Wikipedia : http://en.wikipedia.org

2005-03-29T17:33:40