3.8.1. Leçon d’introduction à python¶
3.8.1.1. Pourquoi python ?¶
Diverses raisons :
- Pas envie de payer une licence.
- Language interpété.
- Facilement interfaçable avec du fortran (pas d’appel système), et du C.
- Librairies : système, réseau, calcul numérique, graphique, etc.
- Pour être efficace ou faire comme les autres.
3.8.1.2. Environnement¶
Choisissez celui qui vous convient.
- vim : notamment pour les anciens.
- emacs : possibilité d’exécution directe + édition à distance.
- ipython : console pratique avec interface vim.
- eric4 : environnement complet avec gestion de projet, exécution et deboguage.
- Plein d’autres IDE.
3.8.1.3. Exécution¶
Soit en direct
$ python
Python 2.7.3 (default, Jan 25 2013, 15:38:17)
[GCC 4.5.1 20100924 (Red Hat 4.5.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Soit en exécution de script via python
$ python myscript.py
Soit en direct exécution de script (si exécutable avec entête)
$ myscript.py
Soit en soumission de job
PBS -q sequentiel
PBS -N mypython
module load mypython
python myscript.py
Warning
Si vous passez par un job, placez la ligne suivante en début de script en cas de tracés
>>> from matplotlib import use ; use('Agg')
3.8.1.4. Le language¶
Fichier courses_python.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""Python de base"""
# Importations
import numpy
a = numpy.arange(5)
from numpy import arange
b = arange(5)
# Inspection
# -> help(numpy.arange)
print dir(numpy)
print type('3')
print callable(numpy.arange)
print isinstance('a', str)
# Indentations
a = True
if a is True:
print 'True !!!' # -> ESSAYEZ SANS INDENTATION
# Quelques types
# - listes
a = [1, 3]
a.append(5) # -> ESSAYEZ EXTEND()
a[0] = 10
print a
del a[1]
# - tuples
b = (5, 6)
print b[1] # -> ESSAYEZ DE CHANGER B[0], DEL
c = list(a)
print b, c
# - dictionnaires
c = {'a':1, 'b':2}
d = dict(c=4)
c.update(d, e=5)
print c.keys()
print c
# - chaines de caracteres
a = 'a'
b = "b"
c = """
e
bc
"""
print "a=%s b=%i"%(3, 4)
a=3; b=4
print "a=%(a)s b=%(b)i"%dict(a=a, b=b) # -> ESSAYEZ AVEC VARS()
print 'jean dupont'.title()
print '123'.rjust(100) # -> ESSAYEZ .CENTER()
print 'a={} b={}'.format(a, b)
print 'a={0} b={1:f}'.format(a, b)
a = {'arg1':'ok', 'arg2':6}
print 'arg1 de a = {a[arg1]}, arg2 = {a[arg2]}'.format(a=a) # on ne passe que a
# Slicing
a = range(10)
print a[0], a[-1]
print a[-2:]
print a[::2] # -> COMMENCER A 3
print a[slice(None, None, 2)]
# Boucles
# - for
a = range(6)
for i in a:
print i
if i==2:
continue
elif i==4:
break
d = {'a':1, 'b':2}
for key, val in d.items():
print key, val
# - while
i = 0
while i < 5:
i += 1
print i
# Interception d'erreur
try:
print AAAAA
except:
print 'Erreur'
# IMPORTANT : REFERENCE AUX VARIABLES NON PRIMAIRES
# - lien
a = [3, 5]
b = a
print a is b
b[0] = 100
print a
# - copy (rarement utilisé)
from copy import copy, deepcopy
ac = copy(a)
ec2 = list(a)
adc = deepcopy(a)
# Fonctions
# - inline
myfunc = lambda arg: arg+1
print myfunc(2)
# - normale
def myfunc2(arg, kwarg=4):
"""Documentation"""
print arg, kwarg
# -> TESTER HELP, KWARG
print myfunc2.__doc__
# - arguments speciaux
def myfunc3(*args, **kwargs):
print 'args', args
print 'kwargs', kwargs
def myfunc4(a, b=1, **kwargs):
print a, b, kwargs
myfunc4(1, **dict(b=3, c=5))
# -> TESTER
# Classes
# - declaration
class MaClasse(object):
"""Doc"""
def __init__(self, a):
self.a = a
def foo(self, b):
"""Doc foo"""
return self.a+b
# - initialisation
mc = MaClasse(5)
print type(mc)
print isinstance(mc, MaClasse)
# - utilisation
print mc.foo(10), mc.foo(100)
# Destruction
del mc
Attention aux règles de codage : Coding rules.
3.8.1.5. Modules importants¶
Librairie standard :
- Outils système :
os
,sys
,shutil
,glob
,stat
,subprocess
,popen2
. - Entrées sorties :
ConfigParser
,argparse
,csv
,logging
. - Divers :
re
,collections
,pickle
,datetime
,time
.
Librairies scientifiques :
- Numérique :
numpy
. - Scientifique :
scipy
. - Graphiques :
matplotlib
,basemap
. - Océano/Météo (UVCDAT) :
cdms2
,cdutil
,genutil
.
Divers :
- Configurations avancées :
configobj
.
La librairie scipy
regroupe beaucoup d’algorithmes scientifiques intéressants.
Il est important de parcourir son contenu avant d’aller voir ailleur.
- Clusters (
cluster
) - Constantes (
constants
) - Transformées de Fourier (
fftpack
) - Integration et ODEs (
integrate
) - Interpolation (
interpolate
) - Entrés/sorties (
io
) - Algèbre linéaire (
linalg
) - Modèle d’entropie max (
maxentropy
) - Traitement d’images (
ndimage
) - Orthogonal distance regression (
odr
) - Optimisation (
optimize
) - Traitement du signal (
signal
) - Matrices creuses (
sparse
) - Algèbre linéaire pour matrices creuses (
linalg
) - Algorithmes spatiaux (
spatial
) - Statistiques (
stats
) - Manipulation de tableaux d’image (
stsci
) - C/C++ integration (
weave
)
3.8.1.6. Avoir sa propre librairie¶
Créez le répertoire lib/mylib
:
mkdir -p lib/mylib
Créez un module
$ echo "earth_radius = 6371006." > lib/mylib/mydata.py
Créer un fichier lib/mylib/__init__.py
$ echo "import mydata" > lib/mylib/__init__.py
Ajustez votre variable PYTHONPATH
$ setenv PYTHONPATH $PWD/lib:$PYTHONPATH
Testez
$ python -c 'import mylib.mydata as myd; print myd.earth_radius'
3.8.1.7. Où trouver de l’aide ?¶
Sources génériques :
- Google.
- Les documentations (générée avec sphinx) des paquets (modules).
- Les didactitiels.
Documentation importantes :
- Librairies de base : http://docs.python.org/2.7/library/index.html
- Manuel de référence de
numpy
: http://docs.scipy.org/doc/numpy/reference - Manuel de référence de
scipy
: http://docs.scipy.org/doc/scipy/reference - Galerie de
matplotlib
: http://matplotlib.org/gallery.html - CDAT (5) : http://www2-pcmdi.llnl.gov/cdat/manuals/cdms5.pdf