JM2L Sophia Antipolis 6 mai 2006 Python par l'exemple



Documents pareils
Les classes en Python

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

Les bases du langage Python

Contents Windows

Application Form/ Formulaire de demande

Java Licence Professionnelle CISII,

Instructions Mozilla Thunderbird Page 1

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Présentation du langage et premières fonctions

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Déploiement OOo en environnement Windows Terminal Server

ACTIVITÉ DE PROGRAMMATION

that the child(ren) was/were in need of protection under Part III of the Child and Family Services Act, and the court made an order on

Plan du cours. Historique du langage Nouveautés de Java 7

Installation d'un TSE (Terminal Serveur Edition)

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

Règlement sur le télémarketing et les centres d'appel. Call Centres Telemarketing Sales Regulation

Utiliser un proxy sous linux

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Calcul Scientifique avec 3

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

as Architecture des Systèmes d Information

Gestion des prestations Volontaire

Architecture client riche Evolution ou révolution? Thomas Coustenoble IBM Lotus Market Manager

Calculation of Interest Regulations. Règlement sur le calcul des intérêts CONSOLIDATION CODIFICATION. Current to August 4, 2015 À jour au 4 août 2015

ANGULAR JS AVEC GDE GOOGLE

Exercices sur SQL server 2000

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Le passé composé. C'est le passé! Tout ça c'est du passé! That's the past! All that's in the past!

Tammy: Something exceptional happened today. I met somebody legendary. Tex: Qui as-tu rencontré? Tex: Who did you meet?

TABLE DES MATIERES A OBJET PROCEDURE DE CONNEXION

Introduction à l algorithmique et à la programmation avec Python. Laurent Signac

Initiation à la programmation en Python

Logitech Tablet Keyboard for Windows 8, Windows RT and Android 3.0+ Setup Guide Guide d installation

Stakeholder Feedback Form January 2013 Recirculation

Interest Rate for Customs Purposes Regulations. Règlement sur le taux d intérêt aux fins des douanes CONSOLIDATION CODIFICATION

Formulaire de candidature pour les bourses de mobilité internationale niveau Master/ Application Form for International Master Scholarship Programme

accidents and repairs:

Loi sur l aide financière à la Banque Commerciale du Canada. Canadian Commercial Bank Financial Assistance Act CODIFICATION CONSOLIDATION

GIGABIT PCI DESKTOP ADAPTER DGE-530T. Quick Installation Guide+ Guide d installation+

Support Orders and Support Provisions (Banks and Authorized Foreign Banks) Regulations

Installation d'un serveur RADIUS

SERVEUR DÉDIÉ DOCUMENTATION

STAGE IREM 0- Premiers pas en Python

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

CLIM/GTP/27/8 ANNEX III/ANNEXE III. Category 1 New indications/ 1 re catégorie Nouvelles indications

Perl Orienté Objet BioPerl There is more than one way to do it

Python Les fondamentaux du langage

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Guide d'installation rapide TFM-560X YO.13

Programmer en JAVA. par Tama

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Comment Créer une Base de Données Ab Initio

TP 1. Prise en main du langage Python

Ordonnance sur le paiement à un enfant ou à une personne qui n est pas saine d esprit. Infant or Person of Unsound Mind Payment Order CODIFICATION

Programmation Web. Madalina Croitoru IUT Montpellier

Initiation à l algorithmique

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

«Clustering» et «Load balancing» avec Zope et ZEO

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

Comment consolider des données

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Comprendre l impact de l utilisation des réseaux sociaux en entreprise SYNTHESE DES RESULTATS : EUROPE ET FRANCE

SAP Runs SAP Reporting Opérationnel & BI avec HANA et SAP Analytics. Pierre Combe, Enterprise Analytics Juin, 2015

HUAWEI TECHNOLOGIES CO., LTD. channelroad. A better way. Together.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Conférence Bales II - Mauritanie. Patrick Le Nôtre. Directeur de la Stratégie - Secteur Finance Solutions risques et Réglementations

Credit Note and Debit Note Information (GST/ HST) Regulations

Java - la plateforme

OpenOffice.org Calc Ouvrir un classeur

4. Groupement d objets

Le stockage local de données en HTML5

Insérer des images dans Base

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

et Active Directory Ajout, modification et suppression de comptes, extraction d adresses pour les listes de diffusion

DOCUMENTATION - FRANCAIS... 2

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

Principe de TrueCrypt. Créer un volume pour TrueCrypt

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Paris Airports - Web API Airports Path finding

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

Configurer la supervision pour une base MS SQL Server Viadéis Services

LE PLAN SAUMON DE LOIRE- ALLIER THE LOIRE-ALLIER. Nicolas FORRAY Dreal Centre, Dreal de bassin Loire-Bretagne

Informatique & Systèmes de Communication. Stages de 12 à 16 semaines aux Etats-Unis

MS SQL Express 2005 Sauvegarde des données

Grégoire de Lassence. Copyright 2006, SAS Institute Inc. All rights reserved.

Éléments de programmation et introduction à Java

Introduction au langage C

affichage en français Nom de l'employeur *: Lions Village of Greater Edmonton Society

Créer un blog ou un site e-commerce avec WordPress

Comment créer un diagramme de Gantt avec OpenOffice.org

Maîtriser le menu contextuel dans un OfficeBean

Cours 1 : La compilation

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Transcription:

JM2L Sophia Antipolis 6 mai 2006 Python par l'exemple Nicolas Duboc <nduboc@debian.org>

Au programme... Présentation et historique Un peu de philosophie Principales caractéristiques Particularités Python pour quoi faire? Quelques défauts Conclusion

Présentation et historique Python est un langage de programmation dynamique, généraliste, orienté objet et bien équipé. Initialement créé par Guido Van Rossum au début des années 90. Développé par une importante communauté autour du Dictateur Bénévole à Vie (BDFL), Guido. Plusieurs implémentations existent : cpython : implémentation principale et historique en C (v 2.4.3) travail commencé sur la version 3000 Jython : implémentation en Java et intégrée à la plateforme Java projet peu actif mais toujours en vie IronPython : implémentation en C# et intégrée à la plateforme.net projet très actif. Développement par Microsoft PyPy : implémentation en Python travail de recherche

Un peu de philosophie pythonienne ~% python Python 2.3.5 (#2, Aug 30 2005, 15:50:26) >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! >>>

Principales caractéristiques : 1. syntaxe simple et claire gurus = ['guido', 'james', 'bjarne'] def hello_guru(name): "Return an hello message for 'name'" name = name.capitalize() return 'Hello, guru %s' % name for name in gurus : print hello_guru(name) 1 : structures de données intégrées au langage : listes, dictionnaires, ensembles 2 : définition de fonction 3 : indentation prise en compte par la syntaxe 4 : seules deux structures de boucles : for et while

Principales caractérisques : 2. langage objet Tout est objet : "spameggs".capitalize() def spam(i): return 2*i type(spam) => <type 'function'> même si la syntaxe laisse penser le contraire parfois : 1. str () => SyntaxError a = 1 a. str () => '1'

Principales caractérisques : 2. langage objet (continued) class Guru (object) : def init (self, firstname, lastname, domain='python') : self.firstname = firstname self.lastname = lastname self.domain = domain def str (self) : return '%s %s, %s guru' % (self.firstname, self.lastname, self.domain) def quack(self): return "Coin!" guido = Guru('Guido', 'Van Rossum') bjarne = Guru('Stroustrup', 'Bjarne', 'C++')

Principales caractérisques : 3. dynamique guido = Guru('Guido', 'Van Rossum', 'Python') guido.title = 'BDFL' guido. dict => {'firstname': 'Guido', 'lastname': 'Van Rossum', 'domain': 'Python', 'title': 'BDFL'} def rename(self, new_name) : self.firstname = new_name Guru.rename = rename guido.rename('just')

Principales caractérisques : 4. bien équipé Structures de données de base directement dans le langage : list = ['un', 'deux', 3, 4] dictionary = {1: 'un', 2: 'deux'} ou pas très loin : set = set([1, 2, 3, 4]) Librairie standard très complète (battery included) : import email import SimpleHTTPServer import imaplib import optparse import threading import logging import csv import xml import unittest

Particularités : 1. list comprehension Définition d'une liste à partir d'une autre : ints = range(6) # ints = [0, 1, 2, 3, 4, 5] power_of_two = [pow(2,i) for i in ints] def qsort(l): if L == []: return [] pivot = L[0] return qsort([x for x in L[1:] if x < pivot]) + [pivot] + \ qsort([y for y in L[1:] if y >= pivot])

Particularités : 2. Duck typing : la généricité par défaut "Si ca marche comme un canard et que ca fait coin comme un canard, c'est que ca doit être un canard." def write_to_file(content, file): '''Write elements of content to a file like object''' for item in content: file.write(str(item)) Pré-requis sur les arguments de cette fonction : - content est iterable (implemente un des protocoles d'itération) - les éléments de content proposent une représentation en chaîne de caractères - file a une méthode write acceptant une chaîne de caractères

class ReverseIterator(object) : def init (self, container): self.container = container self.index = len(container) def next(self) : self.index = 1 if self.index < 0 : raise StopIteration else : return self.container[self.index] Parenthèse : protocoles d'itération Est itérable tout objet fournissant : - soit une méthode getitem (index) qui lève une exception IndexError si index est supérieur à la taille de l'objet - soit une méthode iter () qui renvoie un object ayant une méthode next() qui lève une exception StopIteration en fin d'itération class GuruList(list) : def iter (self) : return ReverseIterator(self)

Particularités : 3. générateurs Les générateurs sont un moyen d'implémenter des itérateurs générant des valeurs de façon faignante (lazy evaluation). def xrange(max) : val = 0 while val < max : yield val val += 1 xrange(10) => <generator object at 0xb7d1f88c> for i in xrange(10): print i

Particularités : 3. generateurs (continued) Nouvelle implémentation de la classe GuruList et de son itérateur : class GuruList(list) : def iter (self): index = len(self.container) 1 while index >= 0 : yield self.container[index] index = 1 Le module itertools contient quelques fonctions intéressantes pour manipuler les itérateurs et générateurs (chainage, filtrage, cycles,...).

evens = map(multiply_by_2, [0, 1, 2, 3, 4, 5]) => [0, 2, 4, 6, 8, 10] Particularités : 4. programmation fonctionnelle Exemple : curryfication def multiply(a, b) : return a * b class Curry (object) : def init (self, function, *args): self.function = function self.arguments = args def call (self, *args): arguments = self.arguments + args return apply(self.function, arguments) multiply_by_2 = Curry(multiply, 2)

Particularités : 5. Et aussi... Excellent support d'unicode name = u'journée Méditerranéenne'.encode('UTF 8') => 'Journ\xc3\xa9e M\xc3\xa9diterran\xc3\xa9enne' Garbage collecting Nombreux IDE disponibles : IDLE, plugin Eclipse, DrPython, eric,... Debuggeur dans la distribution standard. Multi-plateformes : Unices, Windows, Mac OS, Nokia S60, OS/390,...

Python pour quoi faire? Syntaxe claire et simple, pas (trop) de surprises, support de différents paradigmes de programmation (procédural, objet, fonctionnel,...), introspection : => enseignement Librairie standard très complète : => administration système, prototypage Intégration et extension aisée en C, Java,.NET, nombreux tooltiks d'interface utilisateur (Tk, wxwidgets, GTK,...) => glue entre composants, interpréteur embarqué... Et surtout : Syntaxe claire et simple, "seulement une façon de faire" : => code qui devra être relu

Quelques points négatifs Quelques incohérences dans le langage (principalement pour raisons historiques) comme : - présence de deux systèmes d'objets en parallèle - ', '.join(['guido', 'bjarne']) au lieu de ['guido', 'bjarne'].join(', ') Python évolue rapidement. On peut avoir à supporter plusieurs versions. On trouve encore des installations en 2.2, 2.1 voire 1.5. Heureusement les incompatibilités avec les versions précédentes sont minimes.

Conclusion Python, un langage - moderne - simple - évoluant rapidement - avec une importante communauté - et surtout : incite à produire du code compréhensible et maintenable Utilisé par la NASA, Google, Redhat,... Ressources : - http://www.python.org : nouveautés, téléchargements, doc,... - http://planet.python.org : blog de la communauté Python - http://cheeseshop.python.org/pypi : le CPAN de Python - news://comp.lang.python - http://aspn.activestate.com/aspn/python/cookbook/