Deutsch   English   Français   Italiano  
<87a6i5icnv.fsf@universite-de-strasbourg.fr.invalid>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!usenet.goja.nl.eu.org!aioe.org!NmhHF3GLbzxJR67/r10DhQ.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups: fr.comp.lang.python
Subject: Re: Python, angles et heures. Datetime ?
Date: Mon, 15 Nov 2021 17:52:52 +0100
Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg
Message-ID: <87a6i5icnv.fsf@universite-de-strasbourg.fr.invalid>
References: <smr8cc$78l$1@gioia.aioe.org>
	<87ee7iilg8.fsf@universite-de-strasbourg.fr.invalid>
	<smsu5t$k3i$1@gioia.aioe.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: gioia.aioe.org; logging-data="36107"; posting-host="NmhHF3GLbzxJR67/r10DhQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
X-Notice: Filtered by postfilter v. 0.9.2
Cancel-Lock: sha1:dC/BZSfAoYjr3KFqjB6vI2J5pno=
Bytes: 3308
Lines: 60

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=C3=A8re demanderait de distinguer l'un de l'autre.=
...
> Le modulo interviendra dans le travail au-del=C3=A0.

Je pense que cela m=C3=A9rite deux fonctions diff=C3=A9rentes (et aussi deux
regexp diff=C3=A9rentes). Je ne pense pas qu'il y ait quelque chose =C3=A0 =
gagner
=C3=A0 combiner les deux en une.

> Ce que j'ignore, c'est le comportement de re.compile... =C3=80 quoi sert-=
il ?

La raison est un peu th=C3=A9orique. En fait, l'analyse d'un texte par
rapport =C3=A0 une expression r=C3=A9guli=C3=A8re se fait en deux =C3=A9tap=
es :

1) l'expression r=C3=A9guli=C3=A8re est transform=C3=A9e en un automate fin=
i =C3=A9quivalent
(d'abord non-d=C3=A9terministe, puis d=C3=A9terministe)

2) l'automate est utilis=C3=A9 pour dire si le texte fourni correspond ou p=
as
=C3=A0 l'expression r=C3=A9guli=C3=A8re/automate

La premi=C3=A8re =C3=A9tape prend en g=C3=A9n=C3=A9ral beaucoup plus de tem=
ps que la seconde
(qui est aussi rapide que possible puisqu'elle examine chaque caract=C3=A8re
une seule fois). Donc, si ton code fait beaucoup d'appels =C3=A0
match()/matchfull()/etc. avec la m=C3=AAme expression r=C3=A9guli=C3=A8re, =
il est
possible de faire une seule fois la premi=C3=A8re =C3=A9tape, puisqu'elle d=
=C3=A9pend
seulement de l'expression r=C3=A9guli=C3=A8re. C'est ce que fait re.compile=
(). En
r=C3=A9sum=C3=A9 :

- re.match (regex, texte) -> =C3=A9tapes 1 et 2
- dfa =3D re.compile (regex) -> =C3=A9tape 1
- dfa.match (texte) -> =C3=A9tape 2

Le gain de temps d'ex=C3=A9cution en cas de r=C3=A9utilisation est en g=C3=
=A9n=C3=A9ral
substantiel. D'ailleurs, c'est tellement vrai que le module re le fait
tout seul maintenant (il garde en m=C3=A9moire les derni=C3=A8res expressio=
ns
r=C3=A9guli=C3=A8res avec leur automate, pour =C3=A9viter d'avoir =C3=A0 re=
faire la premi=C3=A8re
=C3=A9tape).

-- Alain.