{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Licence CC BY-NC-NDThierry Parmentelat & Arnaud Legout 
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# La clause `import as`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Complément - niveau intermédiaire" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rappel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jusqu'ici nous avons vu les formes d'importation suivantes (rappel de la 3ème semaine):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Importer tout un module sous son nom canonique" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "D'abord pour importer tout un module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " import un_module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "qui est pour simplifier équivalent à" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " un_module = __import__('un_module')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Importer un symbole dans un module, sous son nom canonique" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Et dans la vidéo nous venons de voir qu'on peut aussi faire" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " from un_module import un_symbole" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "qui est grosso-modo équivalent à " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " temporaire = __import__('un_module')\n", " un_symbole = temporaire.un_symbole\n", " del temporaire" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour mémoire, le langage permet de faire aussi des `import *`, qui est d'un usage déconseillé en dehors de l'interpréteur interactif à cause du risque de collisions non controlées des espaces de nommage. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `import` `as`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Tout un module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dans chacun de ces deux cas, on n'a pas le choix du nom de l'entité importée, et cela pose parfois problème.\n", "\n", "Il peut arriver d'écrire un module sous un nom qui semble bien choisi, mais on se rend compte au bout d'un moment qu'il entre en conflit avec un autre symbole.\n", "\n", "Par exemple, vous écrirez un module dans un fichier `globals.py` et vous l'importez dans votre code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " import globals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Puis un moment après pour débugger vous voulez utiliser la fonction *builtin* `globals`. Sauf que, en vertu de la règle LEG, le symbole `globals` se trouve désigner votre module, et non la fonction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "À ce stade évidemment vous pouvez (devriez) renommer votre module, mais cela peut prendre du temps parce qu'il y a de nombreuses dépendances. En attendant vous pouvez tirer profit de la clause `import as` dont la forme générale est" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " import un_module as mon_nom_de_module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ce qui, toujours à la grosse louche, est équivalent à" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " mon_nom_de_module = __import__('un_module')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Un symbole dans un module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On peut de même importer un symbole spécifique d'un module, sous un autre nom que celui qu'il a dans le module. Ainsi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " from un_module import un_symbole as mon_nom_de_symbole" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "qui fait quelque chose comme" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " temporaire = __import__('un_module')\n", " mon_nom_de_symbole = temporaire.un_symbole\n", " del temporaire" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Quelques exemples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vous vous souvenez que nous avons dans notre environnement les modules \n", " * `un_deux`\n", " * `un_deux_trois`\n", " * `un_deux_trois_quatre`\n", " \n", "qui définissent les symboles `un`, `deux`, `trois` et `quatre`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import un_deux as autre_module\n", "autre_module.un()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from un_deux_trois import un as autre_fonction\n", "autre_fonction()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from un_deux_trois_quatre import un as u, deux, trois as t" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "u()\n", "deux()\n", "t()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pour en savoir plus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vous pouvez vous reporter à [la section sur l'instruction `import`](https://docs.python.org/2.7/reference/simple_stmts.html#the-import-statement) dans la documentation python." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" }, "notebookname": "La clause `import as`", "version": "2.0" }, "nbformat": 4, "nbformat_minor": 0 }