GNU/Linux Magazine Hors-série N°
Numéro
65

Python avancé

Temporalité
Mars/Avril 2013
Image v3
Python avancé
Article mis en avant

Dans ce numéro...


Développer une application, ce n'est pas seulement taper des lignes de code. C'est aussi se munir d'un environnement de travail qui fluidifie les choses, que ce soit pour le développement en lui-même, pour les tests, ou pour le déploiement sur d'autres systèmes. Pour faire tout cela en Python, on utilise ce que l'on appelle des environnements virtuels. Nous allons voir dans cet article comment les mettre en place, les utiliser et faire en sorte qu'ils puissent être déployés rapidement. Mais avant de voir tout cela, il faut comprendre comment installer des librairies en Python. C'est par cela que nous allons démarrer.
Le mode CLI pour Command Line Interface – interface en ligne de commande – est très prisé des développeurs : il permet d'obtenir une interface à cheval entre la ligne de commandes et l'interface graphique. On peut utiliser des paramètres pour obtenir un fonctionnement très précis ou bénéficier d'un menu autorisant différents choix.
Nous avons vu précédemment à la fois comment installer simplement des librairies Python avec les virtualenvs et pip, mais aussi comment faire en sorte que votre code à partir d'un CVS soit facilement déployable. Pour distribuer vos programmes ou vos librairies en passant par PyPI (ou une instance personnelle d'un dépôt de module Python), il vous faudra utiliser le module distutils. Celui-ci vous permettra de configurer l'installation de votre projet, de générer différentes versions et de publier celles-ci sur PyPI ou autre.
Utiliser un décorateur ou plutôt la syntaxe des décorateurs n'est pas très compliqué. En programmation orientée objet, pour définir des méthodes de classe, c'est un passage obligé. En revanche, comprendre et créer un décorateur est loin d'être aussi simple... Pour réellement comprendre ce que sont les décorateurs et à quoi ils servent, nous allons devoir repartir de la définition même d'une fonction. Je pense que bon nombre de lecteurs ne ressentiront pas forcément l'utilité du début de l'article, ils le trouveront peut-être trop long et seront enclin à passer rapidement à la suite mais, encore une fois, la notion de décorateur, définie dans le PEP 318 [1], est loin d'être triviale. Je préfère donc commencer par les définitions de base pour être certain que nous nous basons tous sur les mêmes concepts. Comme nous allons effectuer beaucoup de tests, j'utiliserai un interpréteur interactif et vous verrez donc apparaître dans le code d'exemple le symbole du prompt >>>. À moins de le préciser explicitement, j'utiliserai Python 2.7.
Python est un langage admirable pour tous les amoureux de l'algorithmique. L'un des cas d'utilisation les plus fréquents est l'itération. Dans ce domaine comme dans d'autres, Python fait preuve d'originalité. Cet article va présenter un panorama de ce qu'il faut savoir sur ce processus.
Multi-paradigme, le langage Python autorise le traitement de données via le paradigme fonctionnel, en particulier à l'aide de compréhensions de listes, d'ensembles ou de dictionnaires. Plus que de simples outils, il s'agit là de la manière privilégiée pour modifier des collections de données, par une écriture lisible, simple et compréhensible et pour ne rien gâcher, avec des performances souvent meilleures que l'équivalent écrit en procédural.
Python est un langage semi-interprété. En tant que tel, il produit un pseudo-code que l'on peut retrouver dans les fichiers d'extension .pyc (PYthon Compilé). Dans cet article, je vous propose d'étudier le pseudo-code Python. Python fournit le module dis, qui permet de désassembler le pseudo-code (souvent appelé bytecode) en un code plus lisible, l'opcode. Bien sûr, ne vous attendez pas à retrouver du code Python. Vous aurez simplement accès à l'opcode plus facilement lisible pour un être humain et comportant des mnémoniques.
Python est, comme vous le savez déjà très certainement, livré « piles incluses ». Le débogage étant un besoin essentiel pour tout développeur, la bibliothèque standard dispose d'un module dédié à cet aspect : le module pdb. Il est relativement simple d'utilisation et assez complet.
Les tests unitaires sont des éléments essentiels dans le développement de toute application, puisqu'ils permettent de s'éviter bien des déconvenues tout au long des processus de création et de maintenance de l'application. Ils doivent être associés à des tests fonctionnels et de performance, ainsi qu'à diverses autres métriques au sein d'un processus d'intégration complet.
Documenter un code est une perte de temps en première intention. On a le sentiment de ne pas être productif, que le projet sur lequel on travaille n'avance pas. Pourtant, pour peu que l'on développe en équipe ou que le projet soit mis en attente ne serait-ce qu'une semaine, la documentation va permettre de se remettre au travail beaucoup plus rapidement. Qui n'a jamais redécouvert un de ses propres codes au bout de quelques semaines sans comprendre comment il avait pu coder quelque chose d'aussi horrible/merveilleux ?
Python est un langage à typage dynamique et au modèle objet très original, à la fois minimaliste et très complet. Les deux caractéristiques font que le langage Python s'affranchit élégamment d'un certain nombre de contraintes qui pèsent sur les langages à typage statique, mais surtout, des très nombreuses problématiques qui y sont liées. La cohérence de ce modèle objet se fonde principalement sur la bonne utilisation du duck typing. Mais comme d'une part, elle ne résout pas tout et d'autre part, Python abhorre le mode de pensée « bondage and discipline », il a été créé le module abc qui est un bon compromis.
Lorsque l'on veut afficher un simple message en Python, il faut utiliser print. Mais parfois, l'information que l'on transmet à l'utilisateur n'est pas un simple message : il peut s'agir d'un avertissement suite à un problème rencontré par le programme, voire même d'une erreur. Les messages doivent alors être qualifiés et on peut même filtrer leur affichage en fonction de leur importance, les stocker dans des fichiers de log... Vous l'aurez compris, print ne suffit plus ! La journalisation des messages (ou logging en anglais) permet de conserver un historique des incidents survenus lors de l'exécution d'un programme. Les messages, généralement horodatés, sont stockés dans un fichier appelé journal ou fichier de log, mais ils peuvent également être affichés à l'écran. En Python, il existe un module bien pratique pour réaliser toutes les tâches liées à la tenue d'un tel journal : le module logging.
Lorsque l'on doit générer des données ayant une certaine structure, il peut être très intéressant d'utiliser des fichiers de modèles. Ces fichiers correspondent à des textes à trous, que l'on complétera à la demande avec une liste de valeurs, évitant ainsi la répétition d'opérations identiques pour la génération de fichiers ou de chaînes de caractères ayant la même structure.

Magazines précédents

Apprenez à programmer en Go !
GNU/Linux-Magazine Hors-série N°63
Apprenez à programmer en Go !
Ne quittez plus vos serveurs des yeux !
GNU/Linux-Magazine Hors-série N°62
Ne quittez plus vos serveurs des yeux !
Créez vos applications Android comme un pro !
GNU/Linux-Magazine Hors-série N°61
Créez vos applications Android comme un pro !
20 Recettes pour développer vos applications Android
GNU/Linux-Magazine Hors-série N°60
20 recettes pour développer vos applications Android

Les derniers articles Premiums

Les derniers articles Premium

De la scytale au bit quantique : l’avenir de la cryptographie

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Imaginez un monde où nos données seraient aussi insaisissables que le célèbre chat de Schrödinger : à la fois sécurisées et non sécurisées jusqu'à ce qu'un cryptographe quantique décide d’y jeter un œil. Cet article nous emmène dans les méandres de la cryptographie quantique, où la physique quantique n'est pas seulement une affaire de laboratoires, mais la clé d'un futur numérique très sécurisé. Entre principes quantiques mystérieux, défis techniques, et applications pratiques, nous allons découvrir comment cette technologie s'apprête à encoder nos données dans une dimension où même les meilleurs cryptographes n’y pourraient rien faire.

Les nouvelles menaces liées à l’intelligence artificielle

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Sommes-nous proches de la singularité technologique ? Peu probable. Même si l’intelligence artificielle a fait un bond ces dernières années (elle est étudiée depuis des dizaines d’années), nous sommes loin d’en perdre le contrôle. Et pourtant, une partie de l’utilisation de l’intelligence artificielle échappe aux analystes. Eh oui ! Comme tout système, elle est utilisée par des acteurs malveillants essayant d’en tirer profit pécuniairement. Cet article met en exergue quelques-unes des applications de l’intelligence artificielle par des acteurs malveillants et décrit succinctement comment parer à leurs attaques.

Migration d’une collection Ansible à l’aide de fqcn_migration

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Distribuer du contenu Ansible réutilisable (rôle, playbooks) par l’intermédiaire d’une collection est devenu le standard dans l’écosystème de l’outil d’automatisation. Pour éviter tout conflit de noms, ces collections sont caractérisées par un nom unique, formé d’une espace de nom, qui peut-être employé par plusieurs collections (tel qu'ansible ou community) et d’un nom plus spécifique à la fonction de la collection en elle-même. Cependant, il arrive parfois qu’il faille migrer une collection d’un espace de noms à un autre, par exemple une collection personnelle ou communautaire qui passe à un espace de noms plus connus ou certifiés. De même, le nom même de la collection peut être amené à changer, si elle dépasse son périmètre d’origine ou que le produit qu’elle concerne est lui-même renommé.

Body