{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Atelier Python : introduction de base\n", "\n", "---\n", "\n", "## INTRODUCTION\n", "\n", "* Pr\u00e9sentations\n", " * Montr\u00e9al-Python\n", " * Pr\u00e9sentateur\n", " * \u00c9v\u00e9nements : conf\u00e9rence mensuelle (MP), soir\u00e9es projets, sprints, ateliers, PyCon\n", " * Ateliers\n", " * Sponsors\n", " * Et vous?\n", " * \u00c9tudiants?\n", " * Programmeurs?\n", " * Professeurs? \n", "* Python\n", " * interpr\u00e9t\u00e9\n", " * orient\u00e9-objet\n", " * dynamique\n", " * fortement typ\u00e9\n", " * ... utilis\u00e9 (presque) partout\n", "\n", "* Objectifs\n", " * **explorer Python** par l'exp\u00e9rimentation et l'introspection dans l'interpr\u00e9teur\n", " * **ma\u00eetriser les notions de base** : types, fonctions, conditionnels, it\u00e9rations...\n", " * **\u00e9crire un script** qu'on ex\u00e9cutera dans l'interpr\u00e9teur\n", " * **importer** la puissance de Python\n", "\n", "* Documentation\n", " * [http://www.python.org/doc/](http://www.python.org/doc/)\n", " * [http://docs.python.org/tutorial/](http://docs.python.org/tutorial/)\n", " * [http://docs.python.org/library/](http://docs.python.org/library/)\n", "\n", "* Environnement\n", " * \u00e9diteur texte\n", " * interpr\u00e9teur python : python, ipython\n", "\n", "----\n", "\n", "## NOTIONS DE BASE\n", "\n", "### Interpr\u00e9teur\n", "\n", "* python : interpr\u00e9teur de base" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "$ python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* ipython : interactivit\u00e9 / introspection" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "$ ipython" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Syntaxe\n", "\n", "* commentaire : #\n", "* variables : sans $\n", "* instructions : sans ;\n", "* blocs : sans {}\n", "* style : PEP 8\n", "[http://www.python.org/dev/peps/pep-0008/](http://www.python.org/dev/peps/pep-0008/\n", ")\n", "* bris de ligne : \\\\\n", "\n", "### Variables\n", "\n", "* nom, valeur, r\u00e9f\u00e9rence : les noms de variables r\u00e9f\u00e9rencent des valeurs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = 12\n", "b = a" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "id(a)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "142708844" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "id(b)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "142708844" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Types\n", "\n", "* typage dynamique (pas besoin d\u00e9clarer)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n = None # NoneType : type sp\u00e9cial voulant dire... rien\n", "b = True # bool : bool\u00e9en... True ou False n'oubliez pas les majuscules\n", "\n", "i = 15 # int : entier\n", "f = 15.5 # float : d\u00e9cimal\n", "\n", "s = \"chaine\" # str : chaine de caract\u00e8re, instanci\u00e9 avec \"\" ou ''\n", "u = u\"cha\u00eene\" # unicode : cha\u00eene de caract\u00e8re unicode, instanci\u00e9 avec u\"\" ou u''\n", "\n", "l = [] # list : liste d'objets (ordonn\u00e9)\n", "t = () # tuple : liste immuable d'objets\n", "d = {} # dict : dictionnaire de donn\u00e9es (unique, non-ordonn\u00e9), cl\u00e9s-valeurs\n", "\n", "ens = {} # set : ensemble (unique, non-ordonn\u00e9), set([])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* unpacking" ] }, { "cell_type": "code", "collapsed": false, "input": [ "coord = (45.30, 73.34)\n", "x, y = coord" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* fortement typ\u00e9 (pas de transtypage implicite)\n", "* transtypage\n", "\n", " str(), int(), float(), bool(), list(), tuple(), dict(), set()" ] }, { "cell_type": "code", "collapsed": false, "input": [ "float(a)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "12.0" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Conteneurs\n", "\n", "* imbrication" ] }, { "cell_type": "code", "collapsed": false, "input": [ "l = [[1,2,3],[4,'salut',6],[7,8,9]]\n", "d = {1611: {'nom':'Baragiotta', 'prenom':'Davin'}, 123: {'nom':'Leduc-Hamel', 'prenom':'Mathieu'}}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* index" ] }, { "cell_type": "code", "collapsed": false, "input": [ "l[2]\n", "l[-1]\n", "d[1611]\n", "l[1][1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "'salut'" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* slicing" ] }, { "cell_type": "code", "collapsed": false, "input": [ "l[1:2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "[[4, 'salut', 6]]" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fonctions\n", "\n", "#### Appel de fonction\n", "\n", "* nom de fonction : open\n", "* appel de fonction : open()\n", "\n", "#### Built-in : fonctions built-in et structure du langage\n", "\n", "* [http://docs.python.org/2/library/functions.html](http://docs.python.org/2/library/functions.html)\n", "\n", "type() # retourne le type de l'objet
\n", "dir() # retourne les noms derri\u00e8re l'objet
\n", "help() # retourne l'aide
\n", "callable() # dit si un objet est appelable, ex\u00e9cutable...
\n", "
\n", "bool(), int(), str()... # initialisation ou transtypage
\n", "getattr()
\n", "
\n", "isinstance(objet, Type) # teste le classe (ou type) d'un objet
\n", "issubclass()
\n", "super()
\n", "
\n", "len()
\n", "min()
\n", "max()
\n", "
\n", "open()
\n", "range()
\n", "raw_input()
\n", "
\n", "enumerate()
\n", "zip()
\n", "sorted()
\n", "reversed()
\n", "
\n", "print
\n", "del\n", "\n", "#### D\u00e9clarer une fonction\n", "\n", "* convention de nommage\n", "* output : None par d\u00e9faut, une ou plusieurs valeurs\n", "* input : param\u00e8tres positionnels ou nomm\u00e9s\n", "* port\u00e9e des variables\n", "* \\*args, \\*\\*kwargs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def age(annee_naissance):\n", " return 2012 - annee_naissance\n", "\n", "def ma_fonction(param1, param2, param3=None, param4=0, *args, **kwargs):\n", " \"\"\"Ceci est ma fonction.\"\"\"\n", " output = True\n", " return output" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Objets et namespaces\n", "\n", "* objet : tout est un objet\n", "* attribut = variable sur un objet\n", "* m\u00e9thode = fonction sur un objet\n", "\n", "* objet.attribut\n", "* objet.methode()\n", "* objet.attribut.methode()\n", "\n", "### Introspection\n", "\n", "* variable. [+ tab]\n", "* variable?\n", "\n", "* type()\n", "* dir()\n", "* help()\n", "\n", "* exploration des types\n", "\n", "* concat\u00e9nation : s1 + s2" ] }, { "cell_type": "code", "collapsed": false, "input": [ "nom = \"Davin Baragiotta\"\n", "prenom, nom = nom.split()\n", "nom.upper()\n", "nom.lower()\n", "nom.ljust(30)\n", "nom = [prenom.lower(), nom.lower()]\n", "username = \".\".join(nom)\n", "\n", "nom = \"Davin Baragiotta\"\n", "username = \".\".join(nom.split()).lower()\n", "\n", "users = []\n", "users.append(username)\n", "\n", "davin = {'prenom':'Davin', 'nom':'Baragiotta'}\n", "mathieu = {'prenom':'Mathieu', 'nom':'Leduc-Hamel'}\n", "jp = {'prenom':'Jean-Philippe', 'nom':'Caissy'}\n", "\n", "personnes = []\n", "personnes.append(davin)\n", "personnes.append(mathieu)\n", "personnes.append(jp)\n", "\n", "statuts = [\n", " (1, u'Nouveau'),\n", " (2, u'En cours'),\n", " (3, u'Rejet\u00e9'),\n", " (4, u'Retenu'),\n", "]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparaisons et op\u00e9rateurs\n", "\n", "* \\+ - \\* / // \\*\\*\n", "* < > <= >= == !=\n", "* x < y <= z\n", "* faux = False, 0, \"\", (), [], {}, None\n", "* and, or, not\n", "* & | ^\n", "* in, not in\n", "* is, is not\n", "\n", "### Conditionnel\n", "\n", "* if, elif, else" ] }, { "cell_type": "code", "collapsed": false, "input": [ "liste = range(6)\n", "if 5 in liste:\n", " print 'hourra 5'\n", "elif 4 in liste:\n", " print 'hourra 4'\n", "else:\n", " print 'pas hourra'" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "hourra 5\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* one-liner" ] }, { "cell_type": "code", "collapsed": false, "input": [ "'hourra 5' if 5 in liste else 'pas hourra'" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "'hourra 5'" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### It\u00e9ration\n", "\n", "* while" ] }, { "cell_type": "code", "collapsed": false, "input": [ "annee = 2012\n", "while annee <= 2015:\n", " print annee\n", " annee = annee + 1 # annee += 1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2012\n", "2013\n", "2014\n", "2015\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* for" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(2012, 2016):\n", " print i" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2012\n", "2013\n", "2014\n", "2015\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Classes\n", "\n", "#### D\u00e9clarer une classe" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Personne(object):\n", " \n", " def __init__(self, nom, prenom, date_naissance=None):\n", " self.nom = nom\n", " self.prenom = prenom\n", " self.date_naissance = date_naissance\n", " \n", " def age(self):\n", " # TODO : calculer a partir de la date naissance et aujourd'hui\n", " return self.date_naissance" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cr\u00e9er des objets (instances) \u00e0 partir d'une classe" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mathieu = Personne(\"Leduc-Hamel\", \"Mathieu\")\n", "davin = Personne(prenom=\"Davin\", nom=\"Baragiotta\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scripts\n", "\n", "* cr\u00e9er script.py\n", " * exemple de fichier : [script.py](http://bit.ly/16iNg7h)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#! /usr/bin/env python\n", "# -*- encoding: utf-8 -*-\n", "\n", "def coucou(nom):\n", " return u\"Coucou %s!\" % (nom,)\n", " \n", "if __name__ == '__main__':\n", " print u\"--------------------------------------------------\"\n", " print u\"D\u00c9BUT du script\"\n", " print u\"--------------------------------------------------\"\n", " nom = raw_input(\"Quel est votre nom? \")\n", " print coucou(nom)\n", " print u\"-----------------------------------------------\"\n", " print u\"FIN du script\"\n", " print u\"-------------------------------------------------\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "--------------------------------------------------\n", "D\u00c9BUT du script\n", "--------------------------------------------------\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Quel est votre nom? Davin\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Coucou Davin!\n", "-----------------------------------------------\n", "FIN du script\n", "-------------------------------------------------\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* shebang : #! /usr/bin/env python\n", "* encoding : # -\\*- encoding: utf-8 -\\*-\n", "* if \\_\\_name\\_\\_ == '\\_\\_main\\_\\_':\n", "* raw_input()\n", "\n", "* cr\u00e9er un r\u00e9pertoire *projet/contacts*\n", "* cr\u00e9er dans ce r\u00e9pertoire un script Python nomm\u00e9 *form.py* qui :\n", " * demande \u00e0 l'utilisateur son nom, pr\u00e9nom et ann\u00e9e de naissance\n", " * salue l'utilisateur en affichant son pr\u00e9nom et son nom en majuscule\n", "\n", "* ex\u00e9cution ipython : " ] }, { "cell_type": "code", "collapsed": false, "input": [ "run script" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "--------------------------------------------------\n", "D\u00c9BUT du script\n", "--------------------------------------------------\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Quel est votre nom? Davin\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Coucou Davin!\n", "-----------------------------------------------\n", "FIN du script\n", "-------------------------------------------------\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* ex\u00e9cution python : " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "$ python script.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import\n", "\n", "* import module\n", "* from module import nom\n", "* from module import nom as mon_nom\n", "\n", "* built-in : pas besoin d'import\n", "* standard library (shipped with) : import sans installation\n", "* pypi : plein de modules \u00e0 installer qui n'attendent qu'\u00e0 \u00eatre import\u00e9s\n", " * [http://pypi.python.org](http://pypi.python.org)\n", " * _installation de modules couvert dans l'atelier virtualenv_" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from datetime import datetime\n", "\n", "date = datetime.now()\n", "print date\n", "#annee = ??" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2013-09-19 15:53:30.559746\n" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* packages : importable si install\u00e9 dans le path" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sys\n", "sys.path" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "['',\n", " '/home/giotta/machina/venv/mtlpy/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg',\n", " '/home/giotta/machina/venv/mtlpy/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/site-packages/pip-1.1-py2.7.egg',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/plat-linux2',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/lib-tk',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/lib-old',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/lib-dynload',\n", " '/usr/lib/python2.7',\n", " '/usr/lib/python2.7/plat-linux2',\n", " '/usr/lib/python2.7/lib-tk',\n", " '/home/giotta/machina/venv/mtlpy/local/lib/python2.7/site-packages',\n", " '/home/giotta/machina/venv/mtlpy/lib/python2.7/site-packages',\n", " '/home/giotta/machina/venv/mtlpy/local/lib/python2.7/site-packages/IPython/extensions']" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* dans le r\u00e9pertoire *projet/contacts*, cr\u00e9er un script Python nomm\u00e9 *lib.py*\n", "* d\u00e9clarer la fonction *age* dans ce script\n", "* dans ipython, s'assurer d'\u00eatre dans *projet/contacts* puis tester l'import de la fonction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import lib\n", "mon_annee_naissance = 1975\n", "lib.age(mon_annee_naissance)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ImportError", "evalue": "No module named lib", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mlib\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mmon_annee_naissance\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1975\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmon_annee_naissance\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mImportError\u001b[0m: No module named lib" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* am\u00e9liorer *form.py* en saluant le user qui a rempli le form et en lui donnant son \u00e2ge\n", "\n", "### Modules" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "__init__.py" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "__name__" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "__main__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* \\_\\_name\\_\\_ : nom du module, c'est le nom de fichier si import\u00e9, affect\u00e9 aussi \u00e0 \\_\\_main\\_\\_ si ex\u00e9cut\u00e9 (utile pour tests)\n", "* ajouter un fichier \\_\\_init\\_\\_.py dans le r\u00e9pertoire *projet/contacts* pour le convertir en module\n", "* cr\u00e9er un fichier *tests.py* \u00e0 la racine du r\u00e9pertoire *projet/* (pour cr\u00e9er une suite de tests)\n", "* importer la fonction `age` dans *tests.py* pour la tester" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Modules tiers\n", "\n", "https://pypi.python.org/\n", "\n", "* pypi = python packaging index\n", "* les modules qu'on importe vivent dans des paquets \u00e0 installer sur notre syst\u00e8me\n", "* identifier le paquet pertinent (sur pypi ou en parlant avec des Pythoneux)\n", "\n", "#### Bases de donn\u00e9es\n", "\n", "* DB : sqlite3, mysqldb, psycopg2\n", "* ORM : sqlalchemy\n", "\n", "#### Developpement web\n", "\n", "* django (+south)\n", "* pyramid\n", "* flask\n", "\n", "#### Science\n", "\n", "* numpy\n", "* matplotlib\n", "* pandas\n", "* scipy\n", "\n", "##### Psychologie\n", "\n", "* psychopy\n", "\n", "#### Administration syst\u00e8me\n", "\n", "* fabric\n", "* celery\n", "* ...\n", "\n", "#### Traitement des langues naturelles\n", "\n", "* nltk\n", "* pattern\n", "\n", "* installer avec pip\n", "* pip = pip installe python\n", "\n", "#### Installation avec pip\n", "\n", "* pip installe les paquets sur votre machine\n", "* pour une meilleure gestion des paquets, utiliser virtualenv (couvert dans un autre atelier)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "$ pip install nompaquet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Raccourcis syntaxiques\n", "\n", "#### Formattage de cha\u00eenes de caract\u00e8res\n", "\n", "* substitution : %" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for n in range(10):\n", " print \"La puissance 2 de %d est : %d\" % (n, n**2)\n", "\n", "for p in personnes:\n", " print \"Bonjour %s %s\" % (p['prenom'], p['nom'].upper())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "La puissance 2 de 0 est : 0\n", "La puissance 2 de 1 est : 1\n", "La puissance 2 de 2 est : 4\n", "La puissance 2 de 3 est : 9\n", "La puissance 2 de 4 est : 16\n", "La puissance 2 de 5 est : 25\n", "La puissance 2 de 6 est : 36\n", "La puissance 2 de 7 est : 49\n", "La puissance 2 de 8 est : 64\n", "La puissance 2 de 9 est : 81\n", "Bonjour Davin BARAGIOTTA\n", "Bonjour Mathieu LEDUC-HAMEL\n", "Bonjour Jean-Philippe CAISSY\n" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Compr\u00e9hensions de liste, de dictionnaire, de set\n", "\n", "* cr\u00e9er une liste, un dictionnaire ou un set \u00e0 partir d'un it\u00e9rable avec un \"one-liner\"" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "new_list = [v for v in old_list if v < 2]
\n", "new_dict = {k, v for k, v in old_dict.items() if k < 2}
\n", "new_set = {v for v in old_list if v < 2}
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exceptions\n", "\n", "* try, except" ] }, { "cell_type": "code", "collapsed": false, "input": [ "try:\n", " 15/0\n", "except (ZeroDivisionError,), e:\n", " print \"Diviser par z\u00e9ro c'est mal, vous voyez?\"\n", " print e" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fichiers\n", "\n", "* ouvrir, manipuler, fermer\n", " * exemple de fichier : [texte.txt](http://bit.ly/1btMYSW)\n", " * introspecter la fonction open pour voir comment ouvrir en \u00e9criture, lecture, ajout en fin de fichier... : r, w, a..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "f = open('texte.txt')\n", "for line in f.readlines():\n", " print line,\n", "f.close()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Python est un langage que j'aime\n", "et, para\u00eet-il, son nom serait d\u00e9riv\u00e9\n", "du groupe d'humoristes britanniques Monty Python\n", "et non de l'esp\u00e8ce de serpent ayant pour nom \"python\"\n", "\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "f = open(\"texte.txt\")\n", "lignes = f.readlines()\n", "f.close()\n", "\n", "cible = 'python'\n", "contexte = [ligne for ligne in lignes if cible in ligne]\n", "commentaires = [ligne for ligne in lignes if ligne.startswith('#')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Permanence de l'information\n", "\n", "* fichiers\n", "* s\u00e9rialisation : import pickle" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pickle\n", "\n", "f = open('pickles', 'w')\n", "pickle.dump(statuts, f)\n", "pickle.dump(personnes, f)\n", "f.close()\n", "\n", "exit()\n", "\n", "import pickle\n", "\n", "f = open('pickles')\n", "pickle.load(f)\n", "#objets = []\n", "#for obj in pickle.load(f):\n", "# objets.append(obj)\n", "f.close()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* en base de donn\u00e9es?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CONCLUSION\n", "\n", "* import antigravity\n", "\n", "* documentation + interactivit\u00e9 + introspection\n", "* scripts + modules + import\n", "\n", "* communaut\u00e9 pour aider\n", "* Montr\u00e9al-Python : \n", " * entrer dans la communaut\u00e9\n", " * \u00e9v\u00e9nements \u00e0 venir\n", "\n", "* enjoy!\n", "\n", "## EXERCICE\n", "\n", "### Objectif\n", "\n", "Cr\u00e9er un script *flux.py* dans le r\u00e9pertoire *projet/actualites* qui retournera les\n", "5 derni\u00e8res actualit\u00e9s affich\u00e9es sur le site de Montr\u00e9al-Python :\n", "[http://montrealpython.org/fr/feed/](http://montrealpython.org/fr/feed/)\n", "\n", "### Approche\n", "\n", "1. utiliser feedparser\n", " * pip install feedparser\n", "1. lancer interpr\u00e9teur et suivre exemple de la doc :\n", " * ipython\n", " * http://packages.python.org/feedparser/\n", "1. introspecter (et imprimer dictionnaire pour voir ses cl\u00e9s) au besoin\n", "1. coder le script qui fera le traitement voulu\n", "1. lancer le script dans l'interpr\u00e9teur pour confirmer son ex\u00e9cution correcte\n", "1. servir froid\n", "\n", "### Algorithme\n", "\n", "* capter le flux RSS de http://montrealpython.org\n", "* retenir le nombre d'items voulus\n", "* traiter les items retenus :\n", " * cr\u00e9er une cha\u00eene de caract\u00e8res unique : avec les infos des derniers items modifi\u00e9s (titre, URL... et \u00e9ventuellement la date de derni\u00e8re modification)\n", "\n", "### Solution\n", "\n", "Prenez le temps de coder vous-m\u00eame une solution...\n", "... ensuite vous pouvez comparer avec : le [solutionnaire](http://bit.ly/1bnRClq)\n", "\n", "Pour info, la solution ne fait que 8 lignes Python.\n", "\n", "---" ] } ], "metadata": {} } ] }