La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)

Présentations similaires


Présentation au sujet: "CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)"— Transcription de la présentation:

1 CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)

2  Langage de plus haut niveau ◦ Syntaxe simple  Souvent interprété (byte code)  Axé sur le développement rapide  Très utile pour la programmation de contrôle ◦ Accès au système fichiers, etc.  Typage dynamique ◦ Variable non-déclarée ◦ Erreur de typage détecté à l’exécution  Riche en modules réutilisable CSI2520

3  Créé en 1991, en logiciel libre depuis 2000 ◦ Les versions 2.X et 3.X co-existent et ne sont pas complètement compatibles  C’est avant tout un langage multi-paradigme  Programmation très productive (3x à 10x) ◦ Facile à apprendre ◦ Prototypage rapide  Encourage la réutilisation et le logiciel libre ◦ Beaucoup de modules disponibles  En général, plus lent CSI2520

4  Un programme est composé de modules ◦ Créé dans un fichier texte ◦ Les changements de lignes et l’indentation a un signification définie  Un module est composé d’énoncés ◦ Un module peut être importé dans un autre  Un énoncé contient des expressions import math

5  Un module est un fichier texte contenant des instructions Python  Le nom du fichier est le nom du module ◦ Extension.py ◦ Variable système PYTHONPATH CSI2520 >>> import fibo >>> fibo.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

6 CSI2520 # fichier fibo.py def fib(n): # affiche la serie de Fibonacci jusqu’à n a, b = 0, 1 while b < n: print(b) a, b = b, a+b def fib2(n): # retourne la serie de Fibonacci jusqu’à n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result

7 CSI2520 >>> print('Bonjour les amis ! ') Bonjour les amis ! >>> >>> 1 + 1 2 >>>

8 CSI2520 >>> y = 3.14 >>> y 3.1400000000000001 >>> a = "bonjour" >>> a 'bonjour' >>> b = 'salut' >>> b 'salut' >>> c = '''girafe''' >>> c 'girafe' >>> x = 45 >>> x + 2 47 >>> y = 2.5 >>> x + y 47.5 >>> (x * 10) / y 180.0 >>> chaine = "Salut" >>> chaine 'Salut' >>> chaine + " Python" 'Salut Python' >>> chaine * 3 'SalutSalutSalut' >>> x = 2 >>> type(x) >>> x = 2.0 >>> type(x) >>> x = '2' >>> type(x) >>> 2**64 18446744073709551616  Les types ne sont pas déclarés ◦ Chaines de caractères Unicode  Les variables sont des références à des objets ◦ Ramasse-miette

9 CSI2520 >>> animaux = ['girafe','tigre','singe','souris'] >>> animaux[1] 'tigre‘ >>> animaux[-2] 'singe' >>> tailles = [5, 2.5, 1.75, 0.15] >>> mixte = ['girafe', 5, 'souris', 0.15] >>> animaux ['girafe', 'tigre', 'singe', 'souris'] >>> tailles [5, 2.5, 1.75, 0.15] >>> mixte ['girafe', 5, 'souris', 0.15]  Séquence de types mixtes

10 >>> animaux[0:2] ['girafe', 'tigre'] >>> animaux[0:3] ['girafe', 'tigre', 'singe'] >>> animaux[0:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[1:] ['tigre', 'singe', 'souris'] >>> animaux[1:-1] ['tigre', 'singe'] >>> ani1 = ['girafe','tigre'] >>> ani2 = ['singe','souris'] >>> ani1 + ani2 ['girafe', 'tigre', 'singe', 'souris'] >>> ani1 * 3 ['girafe', 'tigre', 'girafe', 'tigre', 'girafe', 'tigre']

11 CSI2520 >>> a = [66.25, 333, 333, 1, 1234.5] >>> print( a.count(333), a.count(66.25), a.count('x')) 2 1 0 >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse() >>> a [333, 1234.5, 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]

12 CSI2520 >>> squares = [x**2 for x in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] >>> vec = [[1,2,3], [4,5,6], [7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9]

13  Les variables sont des références à des objets ◦ Affecter une liste à une variable ne créé pas de copie >>> listeA=[1,2,3] >>> listeB=['a','b',listeA,'c'] >>> listeC=listeB >>> listeD=listeB[:] # copie >>> listeC ['a', 'b', [1, 2, 3], 'c'] >>> listeD ['a', 'b', [1, 2, 3], 'c'] >>> listeA.remove(2) >>> listeC ['a', 'b', [1, 3], 'c'] >>> listeD ['a', 'b', [1, 3], 'c'] >>> listeB.insert(-1,'d') >>> listeC ['a', 'b', [1, 3], 'd', 'c'] >>> listeD ['a', 'b', [1, 3], 'c']

14 CSI2520 >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> tel.keys() ['guido', 'irv', 'jack'] >>> 'guido' in tel True  Séquence avec une relation clé,valeur

15  Séquences immuables >>> trois=(1,2,3) >>> cinq=trois+(4,5) >>> trois (1, 2, 3) >>> cinq (1, 2, 3, 4, 5) >>> trois[1] 2 >>> cinq.index(4) 3 >>> trois[1]=6 Traceback (most recent call last): File " ", line 1, in trois[1]=6 TypeError: 'tuple' object does not support item assignment

16  == teste l’équivalence  is teste si c’est le même objet >>> listeA [1, 3] >>> listeX=[1,3] >>> listeY=listeA >>> listeA==listeX True >>> listeA is listeX False >>> listeA==listeY True >>> listeA is listeY True

17  Les affectations augmentées sont permises ◦ += -= *= /= etc. ◦ a = b = c = 2  Affectation à l’aide de tuples ◦ x, y = 3, 5 ◦ x, y = y, x # les expressions à droite sont évaluées d’abord  Affectation de séquences ◦ a,b,c,d = 'Allo' ◦ x=[1,2,3,4,5] ◦ a,b,*c= x # c sera [3,4,5] ◦ a,*b,c= x # b sera [2,3,4]

18 CSI2520 if x < 0: x = 0 print('de négatif à zéro') elif x == 0: print 'zéro' elif (x == 1 or x == 10): print 'un-dix' else: print 'positif'  L’indentation est obligatoire ◦ L’utilisation de 4 espaces est suggérée  Les paranthèses ne sont requises que pour une expression sur plusieurs lignes  La valeur 0, les objets vide et le None sont considérés comme faux  Les expressions booléenne sont toujours court-circuitées  Pas d’évaluations inutiles

19 CSI2520 >>> for i in [0,1,2,3]: print(i) 0 1 2 3 >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> for a in animaux: for c in a: print(c) g i r a f e t i g r e s i n g e. >>> x=[1,2,3] >>> y=[9,8,7] >>> for (a,b,c) in (x,y): print(a,b,c) 1 2 3 9 8 7 >>> for i in range(4): print(i) 0 1 2 3

20 >>> x=[1,2,3,4,5] >>> while x: if x[0] == 3: print('oui') break # passe par dessus le else x=x[1:] else: print('non') # a executer lorsqu’on sort du while oui >>> x [3, 4, 5] >>>

21  La fonction range retourne un iterable >>> it=range(10,50,5) >>> i=iter(it) >>> next(i) 10 >>> next(i) 15 >>> list(it) [10, 15, 20, 25, 30, 35, 40, 45]

22 While True: reponse= input('Un nombre svp: ') if reponse == 'stop' : break try: nombre= int(reponse) except: print('Erreur! ' * 2) else: print(num*num) print('Merci!')

23  En général, les fonctions sont utiles pour: ◦ Faciliter la réutilisation du code ◦ Minimiser les répétitions dans le code ◦ Décomposer les procédures en entités plus simples  En Python, une fonction se définie avec le def ◦ def créé un objet et lui assigne un nom ◦ def est un énoncé exécutable  La fonction n’existe pas tant que le def n’est pas exécuté def f(x): return x % 2 != 0 and x % 3 != 0 if user == 'advanced': def f(x): return x % 2 != 0 and x % 3 != 0 else: def f(x): return x % 2 != 0

24  Par défaut, toutes les variables dans une fonction sont locales ◦ On peut aussi définir des variables  global : accessible de l’extérieur  nonlocal : qui conservent leur état  Les arguments sont passés par références  Une fonction peut auss être créée avec un énoncé lambda

25 >>> exp2= lambda x: x**2 >>> exp2(5) 25 >>> liste=[1,3,5] >>> list(map(exp2,liste)) [1, 9, 25] >>> def plafond(P): return lambda X: X if X<P else P >>> p255=plafond(255) >>> p255(5) 5 >>> p255(345) 255  Expression pouvant remplacer le def ◦ Le corps du lambda est une seule expression ◦ ◦ souvent utilisé avec  map  reduce  filter

26  Les fonctions Python sont implicitement polymorphiques ◦ Mais il n’y a pas de surcharge de fonctions  Il n’est pas permit de définir une autre fonction avec le même nom mais une signature différente >>> def fois(x,y): return x*y >>> fois(5,7) 35 >>> fois('salut',3) 'salutsalutsalut‘ >>> def intersection(A,B): resultat= [] for x in A: if x in B: resultat.append(x) return resultat >>> intersection([1,2,3,4,5],(1,3,5,7,9)) [1, 3, 5] >>> intersection(['a','b','c'],'salut bonjour') ['a', 'b']

27  Une fonction peut retourner des tuples >>> pluriel=lambda X : X+'s' >>> def plurielListe(X): resultat=list(map(pluriel,X)) return resultat[0][0],resultat >>> plurielListe(liste) ('c', ['chats', 'chiens', 'loups'])

28 >>> def prefixe(pre,*mots): mots2=[] for m in mots: mots2.insert(-1,pre+m) return mots2 >>> prefixe('le ', 'chien','chat','loup') ['le chat', 'le loup', 'le chien']

29 >>> def applatir(L): resultat=[] for x in L: if isinstance(x,list): resultat+=applatir(x) else: resultat.append(x) return resultat >>> applatir([1,2,3,4]) [1, 2, 3, 4] >>> applatir([1,2,[3,[4,5]],8]) [1, 2, 3, 4, 5, 8]


Télécharger ppt "CSI2520 Un langage de programmation par scripting orienté-objet (et fonctionnel)"

Présentations similaires


Annonces Google