La page Introduction à python 2.5 présente quelques modules internes, c'est-à-dire installés automatiquement avec l'application Python. D'autres modules doivent être installés en supplément de python, comme s'il s'agissait d'applications extérieures. Il se peut que les noms de paquet diffèrent des noms de module à charger. Sur une distribution Debian, ces modules installés se trouvent à une adresse qui ressemble à /usr/lib/python2.4/site-packages/
Voyez ici pour les généralités concernant les modules.
Tkinter,
wxPython,
PyQt,
PyGTK pour une interface graphique
numpy remplace math et random, Numeric ou numarray (tableaux et matrices)
stats pour le traitement statistique à partir de listes, tuples et tableaux numpy
PIL (module python-imaging) pour le traitement des images
sqlite et mysqldb pour les bases de données de type SQL
apt-get install python-mysqldb python-stats python-numpy installe ces derniers paquets sur un système Debian
Voir impérativement la page modules pour les généralités.
Ce module, apparu sur Debian à partir de la version 4.0 Etch (Python2.4?), est destinée à remplacer les modules externes Numeric et numarray. Il prend également en charge les fonctionnalités des modules internes (c)math et random.
array([[2,4],[9,7],[3,5]) définit in extenso un tableau de trois rangées de deux éléments
array([[2]*3]*4) produit un tableau de quatre rangées de trois éléments, intialisés à 2
arange() produit un tableau unidimensionnel avec la suite précisée (voir range(), "réels" acceptés)
empty((d1,d2,...),'type') construit un tableau à n dimensions, chacune ayant d1,d2... éléments; ces éléments ne sont
pas initialisés, mais un type peut être défini: 'i'=entiers, 'f'=float32, 'd'=floatdouble, 'c'=caractères
zeros((d1,d2,...),'type') construit un tableau à n dimensions, chacune ayant d1,d2... éléments; chaque élément est initialisé à 0
ones((d1,d2,...),'type') construit un tableau à n dimensions, chacune ayant d1,d2... éléments; chaque élément est initialisé à 1
reshape(a,(n,m...)) remet les éléments d'un tableau dans un autre redimensionnement (cela doit tomber juste):
>>> reshape([1,2,3,4,5,6],(2,3))
array([[1, 2, 3],
[4, 5, 6]])
À suivre...
Vous trouverez quelques informations sur ces fonctions en 2.1 math
fonctions unaires: absolute, negative, sign, fabs, fmod, conjugate, floor, ceil
exp, log, log2, log10, sqrt
invert, left_shift, right_shift, logical_not
sin, cos, tan, sinh, cosh, tanh
arcsin, arccos, arctan, arcsinh, arccosh, arctanh
fonctions binaires: add, subtract, multiply, divide, divide_safe, power
greater, greater_equal, less_equal, less, equal, not_equal
bitwise_and, bitwise_or, bitwise_xor
logical_and, logical_or, logical_xor
maximum, minimum, hypot(c1,c2)
around(reel,n) arrondissement d'un réel à la nième décimale
arctan2(y,x) donne la pente à partir de deux nombres, réponses de -PI à PI selon les signes respectifs de y et x
Ce sous-module peut remplacer le module interne random.
bytes(n) donne une chaîne de n caractères au hasard.
randint(n) ou random_integers(n) retourne un entier de 1 à n non inclus
randint(n,m) ou random_integers(n,m) retourne un entier de n à m non inclus
permutation(n) donne un tableau mélangé à une dimension de la série de 0 à n-1.
permutation(n)+m donne un tableau mélangé à une dimension de la série de m à m+n-1.
ranf, random, sample ou random_sample() retourne un réel dans l'intervalle [0,1[
ranf, random, sample ou random_sample(n) retourne un tableau de n réels dans l'intervalle [0,1[
rand(d0,d1...) retourne un tableau à plusieurs dimensions, chaque élément est initialisé dans l'intervalle [0,1[
shuffle() mélange le contenu d'une liste ou tableau à une dimension:
>>> a=[1,2,3,4] numpy.random.shuffle(a); print a
Les fonctions suivantes renvoient un nombre aléatoire selon une loi de distribution, que vous connaissez probablement si vous en avez besoin:
beta(), binomial(), chisquare(), exponential(), f(), gamma(), geometric, gumbel(), hypergeometric(), laplace(), logistic(), lognormal(), logseries(), multinomial(), multivariate_normal(), negative_binomial(), noncentral_chisquare(), noncentral_f(), normal(), pareto(), poisson(), power(), rayleigh(), standard_cauchy(), standard_exponential(), standard_gamma(), randn() = standard_normal(), standard_t(), triangular(), uniform(), vonmises(), wald(), weibull(), zipf()
Par exemple, numpy.random.normal(2,1.3) retourne un réel selon la probabilité décrite par la répartition d'une courbe normale de centre 2 et d'écart-type 1.3.
Les séquences ECMA-48 permettent le formatage de la sortie sur console et commence par l'octet 27 "ESC". Cela permet notamment d'écrire à un endroit particulier de l'écran, effacer la console ou colorer caractères et fond. Cette fonctionnalité est d'origine avec GNU/Linux (documentation: /usr/share/man/man4/console_codes.4.gz). Par exemple: echo -e "\033[2J" efface la console.
Sous Windows NT et suivant, il suffirait d'ajouter la ligne DEVICE=ANSI.SYS dans le fichier CONFIG.NT. On peut passer des instructions en ligne de commande avec prompt $e[2J (par exemple).
Plus d'informations: http://en.wikipedia.org/wiki/ANSI_escape_code.
La séquence générale est ESC [ # CODE (sans espace)
ESC est l'octet 27, en python: chr(27) ou "\033" ou "\x1b"
[ est la parentèse carrée ouvrante
# symbolise ici un nombre en base décimale, plusieurs paramètres sont séparés par un point-virgule
CODE est une lettre de l'alphabet
\033[2J efface tout l'écran
\033[H place le curseur en haut à gauche
\033[#;#_H place le curseur à un point particulier de l'écran. \033[1;1H place le curseur en haut à gauche
\033[#A déplace le curseur de # caractères vers le haut
\033[#B déplace le curseur de # caractères vers le bas
\033[#C déplace le curseur de # caractères vers la droite
\033[#D déplace le curseur de # caractères vers la gauche
\033[#f place le curseur à la ligne # , première colonne
\033[#L insère # lignes à la position du curseur, repousse la suite
\033[#M efface # lignes à la position du curseur, ramène les suivantes
\033[#a place le curseur à la ligne #, colonne inchangée
\033[#;#r définit une première et une dernière ligne pour le scroll
\033[s sauvegarde la position du curseur
\033[u replace le curseur à la position préalablement sauvegardée
\033[?25l cache le curseur; \033[?25h le rétablit
Les couleurs (très limitées) se codent \033[_m le souligné doit être remplacé par:
0 réinitialisation: blanc sur fond noir
1 haute intensité
3n couleur du caractère
4n couleur du fond
5 clignotement
7 inverse-video
Caractère Fond 30 Gris moyen 40 Noir 31 Rouge 41 Rouge foncé 32 Vert 42 Vert foncé 33 Jaune 43 brun 34 Bleu 44 Bleu foncé 35 Magenta 45 Mauve 36 Cyan 46 Cyan foncé 37 Blanc 47 gris clair 39 Blanc gras
On compose couleurs de caractère et de fond en séparant les nombres par un point virgule:
>>> print "\033[33;45m"+"Spam?"+"\033[0m"
Spam?
Le module ecma (expérimental) permet l'utilisation simple de ces codes:
paintat(ligne,colonne,texte,fond,"Chaine")
Voir Modules utilisateurs pour l'utilisation d'un module fait à la maison. Copiez le code ci-dessous dans un fichier nommé ecma.py.
"""module python ecma.py - 2007.02.07 - www.jchr.be - GPL-2 - Ver 1.1 2008.01.15
Enhanced (line, column, color) console printing functions using some ECMA-48 sequences"""
def colors():
"""Composition of colors: add red=1, green=2 or blue=4. You can use number or chain to choose color:
Text: Background: (darker than the first name - official)
0, 30 or 'grey' 0, 40 or 'black'
1, 31 or 'red' 1, 41, 'red' or 'darkred'
2, 32 or 'green' 2, 42, 'green' or 'darkgreen'
3, 33 or 'yellow' 3, 43, 'yellow' or 'brown'
4, 34 or 'blue' 4, 44, 'blue' or 'marine'
5, 35 or 'magenta' 5, 45, 'magenta' or 'purple'
6, 36 or 'cyan' 6, 46, 'cyan' or 'darkcyan'
7, 37 or 'white' 7, 47, 'white' or 'lightgrey'
9, 39 or 'bright'"""
print """Composition of colors: add red=1, green=2 or blue=4. Use number or chain to choose a color:
Text: Background: (darker than the first name - official)
0, 30 or 'grey' 0, 40 or 'black'
1, 31 or 'red' 1, 41, 'red' or 'darkred'
2, 32 or 'green' 2, 42, 'green' or 'darkgreen'
3, 33 or 'yellow' 3, 43, 'yellow' or 'brown'
4, 34 or 'blue' 4, 44, 'blue' or 'marine'
5, 35 or 'magenta' 5, 45, 'magenta' or 'purple'
6, 36 or 'cyan' 6, 46, 'cyan' or 'darkcyan'
7, 37 or 'white' 7, 47, 'white' or 'lightgrey'
9, 39 or 'bright'"""
def clear(chain=''):
"""Clears the screen"""
print "\033[2J"
def cls(chain=''):
"""Clears also the screen"""
print "\033[2J"
def home(chain=''):
"""Writes a chain at the 'home' position (upper left corner)"""
print "\033[H"+chain
def new(chain=''):
"""Clears the screen and writes at the home position - same as clear + printat(1,1,chain)"""
print "\033[2J\033[H"+chain
def fgcolor(fg):
"""Used by paint() and paintat(): encodes the foreground color"""
try:
fg+1 # if not a number, a string:
except:
bg=bg.lower()
if fg=="grey" or fg=="gray": return 30
if fg=="red": return 31
if fg=="green": return 32
if fg=="yellow": return 33
if fg=="magenta": return 34
if fg=="magenta": return 35
if fg=="cyan": return 36
if fg=="white": return 37
if fg=="bright": return 39
else:
if fg<10: return fg+30
else: return fg
def bgcolor(bg):
"""Used by paint() and paintat(): encodes the background color"""
try:
bg+1 # if not a number, a string:
except:
bg=bg.lower()
if bg=="black": return 40
if bg=="red" or bg=="darkred": return 41
if bg=="green" or bg=="darkgreen": return 42
if bg=="brown" or bg=="brown": return 43
if bg=="blue" or bg=="marine": return 44
if bg=="magenta" or bg=="purple": return 45
if bg=="cyan" or bg=="darkcyan": return 46
if bg=="white" or bg=="lightgrey" or bg=="lightgray": return 47
else:
if bg<10: return bg+40
else: return bg
def printat(line,column,chain=''):
"""Writes a chain at a precise line/column"""
print "\033["+str(line)+";"+str(column)+"H"+chain
def paint(fg,bg,chain=''):
"""Writes a colored chain - call ecma.colors()"""
print "\033["+str(fgcolor(fg))+";"+str(bgcolor(bg))+"m"+chain
def paintat(line,column,fg,bg,chain=''):
"""Writes a colored chain at a precise line/column - call ecma.colors()"""
print "\033["+str(line)+";"+str(column)+"H"+"\033["+str(fgcolor(fg))+";"+str(bgcolor(bg))+"m"+chain