Module re (Regular Expression) - Search vs Match
"Python offers two different primitive operations based on regular expressions: match and search. If you are accustomed to Perl's semantics, the search operation is what you're looking for. See the search() function and corresponding method of compiled regular expression objects.
Note that match may differ from search using a regular expression beginning with "^": "^" matches only at the start of the string, or in MULTILINE mode also immediately following a newline. The ``match'' operation succeeds only if the pattern matches at the start of the string regardless of mode, or at the starting position given by the optional pos argument regardless of whether a newline precedes it. "
La différence entre match et search réside dans l'emploi de ^ et sa signification. Search considère que "^" représente le début de toutes les lignes. Match considère que "^" représente uniquement le premier caractère de la chaine à analyser et non le premier caratère de chaque nouvelle ligne.
Illustration :
Code: |
>>> re.compile("^a",re.M).match("\na") # echec >>> re.compile("^a",re.M).search("\na") # success
>>> re.compile("^a",re.M).match("toto\nabc") # echec >>> re.compile("^a",re.M).search("toto\nabc") # succes - ici search est valide car "^" indique pour lui le début de n'importe qu'elle nouvelle ligne |
Si on précise une position de départ d'analyse dans la chaine, cette position de départ est représentée par "^", dans ce cas match considére que le premier caractère est celui possédant comme index la position
Illustration :
Code: |
>>> re.compile("^bonjour",re.M).match("salut\nbonjour\ntout le monde") # echec >>> re.compile("^bonjour",re.M).match("salut\nbonjour\ntout le monde",6) # success - la position 6 est le \n |
[note:re.compile(RegExp).match(Expression a tester, pos debut de test, pos fin)]
Exemples de la documentation :
Code: |
re.compile("a").match("ba", 1) # succeeds re.compile("^a").search("ba", 1) # fails; 'a' not at start re.compile("^a").search("\na", 1) # fails; 'a' not at start re.compile("^a", re.M).search("\na", 1) # succeeds re.compile("^a", re.M).search("ba", 1) # fails; no preceding \n |
Autres exemples :
Code: |
>>> re.compile("toto\n^a",re.M).match("toto\nabc") # succes |
Exemples d'utilisation de variable :
Code: |
>>> re.match("(?P<name>.+) (?!(?P=name))","55 55") # echec >>> re.match("(?P<name>.+) (?!(?P=name))","55 56") # succes |
Méthodes Statiques
A partir de la version 2.2, python gère les méthodes statiques via la fonction staticmethod() :
Code: |
class C:
def foo(x, y): print "staticmethod", x, y foo = staticmethod(foo)
C.foo(1, 2) |
Traitements sur List ou Tuple
Pour appliquer un traitement à tous les éléments d'une liste, ou d'un tuple, et celà, récursivement.
exemple:
on veut multiplier par deux toutes les valeurs de l
l = [1 , [ 4 , 3 ] , 2 , [ [3,9],8] ]
l = [2 , [ 8 , 6 ] , 4 , [ [6,18],16] ]
fonction récursive de parcours :
Code: |
def function(sequence): if (type(sequence) is list) or (type(sequence) is tuple): index = 0 for val in sequence: function(val) pass else: print sequence # traitment pass pass |
fonction récursive pour modifier tous les éléments :
(attention, seul le type list peut être modifié en python)
Code: |
def function(sequence): if (type(sequence) is list): index = 0 for val in sequence: sequence[index] = function(val) index = index + 1 pass return sequence else: return sequence * 2# traitment pass pass |
SGBDR et SGBDOO en Python
SGBDR écrit en Python :
Gadfly
l'enregistrement direct d'objets pythons en base, avec construction automatique d'une table mappant l'objet en question
SGBDOO Python :
Durus - Systeme de Persistance d'objet et Transaction
ZODB - Idem en plus avancé, utilisé dans Zope
Liens
Site officiel
http://www.python.org
Plusieurs liens python
http://www.python-eggs.org/links.html
Packaging de script python sous Windows
http://www.mcmillan-inc.com/install5_ann.html
http://starship.python.net/crew/theller/py2exe/
IDE Performant - HAP Python Remote Debugger
http://hapdebugger.sourceforge.net/
Psyco - optimiser lexecution dun code python
"Psyco is a specializing compiler for the Python language"
http://psyco.sourceforge.net/
Pyrex - permet d'écrire des extensions a python compilées en C
"A Language for Writing Python Extension Modules"
http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/
Plex - Module python implémentant GNU Flex (=Lex) - Analyseur lexical
http://www.cosc.canterbury.ac.nz/~greg/python/Plex/
"The Biopython Project is an international association of developers of freely available Python tools for computational molecular biology"
http://www.biopython.org/
Python Performance Tips
http://manatee.mojam.com/~skip/python/fastpython.html
SciPy
"Python for Scientific Computing Workshop"
http://www.scipy.org/
Numerical Python
"Numerical Python adds a fast, compact, multidimensional array language facility to Python"
http://pfdubois.com/numpy/
[Intégration autres langages]
Weave - "a Tool for Inline C/C++ in Python"
http://www.scipy.org/site_content/weave
PyInline - "Inline for Python"
http://pyinline.sourceforge.net/
[Crypto]
*Eric A. Young
http://www.python.org/workshops/1995-12/papers/kuchling.html
*PyCrypto
http://www.amk.ca/python/code/crypto.html
et http://www.amk.ca/python/writing/pycrypt/ (doc. complète sur la cryptologie)
[Framework Jeux]
PyGame
http://www.pygame.org/
PyKyra
http://sourceforge.net/projects/kyra
PythonWare Daily Python-URL (WebLOG Dev Python)
http://www.pythonware.com/daily/