.. $Id: documentation.rst.in 14117 2011-05-11 08:12:37Z ycadour $


########################
Usages et bibliothèques 
########################

Le langage Python est accompagné de nombreux modules qui permettent aux développeurs d'avoir, de base, de nombreuses fonctionnalités.
Dans ce chapitre nous allons étudier quelques modules présents dans le langage.



=========================
Itérateurs VS Générateurs
=========================

Toute la clé réside dans le stockage mémoire de vos données !

https://docs.python.org/fr/3/tutorial/classes.html#iterators

:: 

   >>> # Build and return a list
   >>> def firstn(n):
   >>>     num, nums = 0, []
   >>>     while num < n:
   >>>         nums.append(num)
   >>>             num += 1
   >>>     return nums
   >>>    
   >>> sum_of_first_n = sum(firstn(1000000))
   
   
Excercice : faites une approche par itérateur (pattern) de cette fonction.  Faites de même avec un générateur.
   
https://wiki.python.org/moin/Generators#CA-31c8468eb74aeab199a158c358a0dcdea389911d_1

Les itérateurs amenés par Python en standard :

https://docs.python.org/3.7/library/itertools.html


===============================================================
Passage d'arguments par fichier de configuration : ConfigParser
===============================================================

L'objectif est ici d'appliquer un parsing sur des fichiers type *.ini pour changer une configuration d'application sans altérer le code python.

Tutoriel et toutes les infos :
https://docs.python.org/3.8/library/configparser.html
Examples:
https://wiki.python.org/moin/ConfigParserExamples

===============================
Pré-traitement: les décorateurs
===============================

L'objectif est ici d'appliquer un pré-traitement au moment de l'appel d'une *fonction*. Un cas très concret: retourner le résultat d'une fonction dont le calcul a
déjà été effectué ("cache").

Pour bien comprendre, voici un tutoriel: 
https://openclassrooms.com/courses/apprenez-a-programmer-en-python/les-decorateurs

Exercice : obtenir le temps d'exécution d'une fonction en lui apposant un décorateur (via cProfile)


=============================
Passage d'arguments: argparse
=============================

Faciliter le passage d'arguments pour votre module Python sans l'artisanal "argsysv" ! Tutoriel en ligne :
Tutoriel :
https://docs.python.org/3.7/howto/argparse.html

*Exercice: tests_passage_arguments.py*

=========
Module os
=========

Le module os fournit un grand nombre de fonctions sur la manipulation du système.

::
    
    >>> import os

*Exercice: tests_remplacer_motif_fichier_texte.py*    

=========
Module csv
=========

Le module csv fournit un grand nombre de fonctions sur la manipulation de fichiers CSV.

::
    
    >>> import csv

*Exercice: tests_csv.py*  

=========
Module Tkinter
=========

Le module Tkinter fournit une bibliothèque complète pour la création d'interface utilisateur par progammation événementielle.

::
    
https://pythonbasics.org/tkinter/

    >>> from Tkinter import *
    
La bible Tkinter:

https://insolor.github.io/effbot-tkinterbook-archive/


Exercice : Interface Tk pour coder/décoder des fichiers ascii via le crytpage de César. 