# Programmation Python/Types
## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp

## Partie 1 - Introduction

* Avant-propos à l'attention des non-programmeurs
* Introduction
* Installation
* Éditeurs
* Programmer en deux minutes
** une messagerie instantanée
** un programme interfacé avec Wikipédia
** un serveur Web

## Partie 2 - Le langage

* Afficher un texte
* Structure d'un programme
* Variables
* Opérateurs
* Structures de contrôle
* Instructions répétitives
* Types
** Numériques
** Booléens
** Chaines de caractères
** Listes
** Tuples
** Dictionnaires
** Dates
** Ensembles
* Fonctions
* Modules
* Exercices
** Palindrome
* Regex
* Programmation orientée objet pour les non-programmeurs
* Classes
* Classes et Interfaces graphiques
* Fichiers
* Exceptions
* Bases de données
** Gestion
* L'interface CGI
* Applications web
* Réseau
* Threads

## Partie 3 - Les bibliothèques

* Bibliothèques pour Python
* L'interface graphique
* Utilisation de fenêtres et de graphismes
** Tkinter
** Widgets
** Turtle
* Les threads
* XML
* JSON
* Tests
* Analyse statique de programmes
* Fabric
* Le Web
** Django
** Karrigell
** Aiohttp
[ Modifier le sommaire ]

## Typage des variables

Pour distinguer les uns des autres ces divers contenus possibles des variables, le langage de programmation fait usage de différents types de données (ex : le type 'entier', le type 'réel', le type 'chaîne de caractères', le type 'liste', etc.).
Python est un langage à typage dynamique. Cela signifie que bien que gérant différents types, lorsqu'une variable est affectée, l'interpréteur trouvera automatiquement son type sans que l'utilisateur soit contraint de le préciser. Ceci constitue une particularité intéressante de Python, qui le rattache à une famille particulière de langages où l'on trouve aussi par exemple Lisp, Scheme, et quelques autres.
Par opposition, le typage statique est préférable dans le cas des langages compilés comme C++ et Java, parce qu'il permet d'optimiser l'opération de compilation (dont le résultat est un code binaire « figé »). Dans ces langages, il faut toujours - par des instructions distinctes - d'abord déclarer (définir) le nom et le type des variables, et ensuite seulement leur assigner un contenu, lequel doit bien entendu être compatible avec le type déclaré.
Le typage dynamique quant à lui permet d'écrire plus aisément des constructions logiques de niveau élevé (métaprogrammation, réflexivité), en particulier dans le contexte de la programmation orientée objet (polymorphisme). Il facilite également l'utilisation de structures de données très riches telles que les listes et les dictionnaires.

## Types natifs

Liste des types :
| int | Nombre entier optimisé |
| long | Nombre entier de taille arbitraire |
| float | Nombre à virgule flottante |
| complex | Nombre complexe |
| str | Chaîne de caractère |
| unicode | Chaîne de caractère unicode |
| tuple | Liste de longueur fixe |
| list | Liste de longueur variable |
| dict | dictionnaire |
| file | Fichier |
| bool | Booléen |
| NoneType | Absence de type |
| NotImplementedType | Absence d'implementation |
| function | fonction |
| module | module |
Tableau des types Python 3.x ayant changé de nom depuis 2.x :
| nom | description | équivalent 2.x |
| int | nombre entier de longueur arbitraire | long |
| byte | chaîne de caractères ASCII | str |
| str | chaîne de caractères Unicode | unicode |

## Détermination d'un type

La fonction type permet de connaître le type d'une variable.
* >>> a=3
* >>> type(a)
* <type 'int'>
* Exemple 1 : utilisation de la fonction type

## Conversion des types

Il existe plusieurs fonctions qui permettent de forcer le type d'une variable en un autre type.
* bool : convertit en booléen : "0", "" et "None" donnent "False" et le reste "True".
* int : permet de modifier une variable en entier. Provoque une erreur si cela n'est pas possible.
* long : transforme une valeur en long.
* str : permet de transformer la plupart des variables d'un autre type en chaînes de caractère.
* float : permet la transformation en flottant.
* repr : similaire à "str". Voir la partie sur les objets
* eval : évalue le contenu de son argument comme si c'était du code Python.
* split : sépare une chaine en liste.
* join : transforme une liste en chaine, dont le séparateur est en préfixe (" ".join(MaListe)).
* datetime.strptime('20170727222900', '%Y%m%d%H%M%S') : change une chaine en date.
* maDate.strftime('%Y%m%d%H%M%S') : change une date en chaine.