Sujet : Re: Python, angles et heures. Datetime ?
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.pythonDate : 15. Nov 2021, 18:52:52
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87a6i5icnv.fsf@universite-de-strasbourg.fr.invalid>
References : 1 2 3
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Dominique <
zzz@aol.com.invalid> writes:
[...]
Je pensais renforcer mon script avec tes lignes :
>
if d < 360 and m < 60 and s < 60:
return d,m,s
else:
return None
>
mais il me faudrait distinguer les heures (maxi 24) des angles...
Placer un modulo derrière demanderait de distinguer l'un de l'autre....
Le modulo interviendra dans le travail au-delà.
Je pense que cela mérite deux fonctions différentes (et aussi deux
regexp différentes). Je ne pense pas qu'il y ait quelque chose à gagner
à combiner les deux en une.
Ce que j'ignore, c'est le comportement de re.compile... À quoi sert-il ?
La raison est un peu théorique. En fait, l'analyse d'un texte par
rapport à une expression régulière se fait en deux étapes :
1) l'expression régulière est transformée en un automate fini équivalent
(d'abord non-déterministe, puis déterministe)
2) l'automate est utilisé pour dire si le texte fourni correspond ou pas
à l'expression régulière/automate
La première étape prend en général beaucoup plus de temps que la seconde
(qui est aussi rapide que possible puisqu'elle examine chaque caractère
une seule fois). Donc, si ton code fait beaucoup d'appels à
match()/matchfull()/etc. avec la même expression régulière, il est
possible de faire une seule fois la première étape, puisqu'elle dépend
seulement de l'expression régulière. C'est ce que fait re.compile(). En
résumé :
- re.match (regex, texte) -> étapes 1 et 2
- dfa = re.compile (regex) -> étape 1
- dfa.match (texte) -> étape 2
Le gain de temps d'exécution en cas de réutilisation est en général
substantiel. D'ailleurs, c'est tellement vrai que le module re le fait
tout seul maintenant (il garde en mémoire les dernières expressions
régulières avec leur automate, pour éviter d'avoir à refaire la première
étape).
-- Alain.