Implications sur les performances de re.compile de Python
En Python, le module re fournit des fonctionnalités permettant de travailler avec des expressions régulières. Une question qui se pose souvent est de savoir s'il y a un avantage en termes de performances à utiliser la méthode re.compile pour précompiler les expressions régulières.
Utilisation de re.compile par rapport à la correspondance directe
Considérez les deux extraits de code suivants :
h = re.compile('hello') h.match('hello world')
re.match('hello', 'hello world')
Le premier extrait précompile l'expression régulière « bonjour » à l'aide de re.compile(), puis utilise le modèle compilé pour effectuer la correspondance. Le deuxième extrait utilise simplement la fonction re.match() directement pour effectuer la correspondance.
Preuves anecdotiques et analyse du code
Certains utilisateurs signalent qu'ils n'ont observé aucun différence de performances significative entre l'utilisation de re.compile() et la correspondance directe. Ceci est soutenu par le fait que Python compile en interne les expressions régulières et les met en cache lorsqu'elles sont utilisées (y compris les appels à re.match()).
L'analyse du code du module re dans Python 2.5 révèle que :
def match(pattern, string, flags=0): return _compile(pattern, flags).match(string) def _compile(*key): cachekey = (type(key[0]),) + key p = _cache.get(cachekey) if p is not None: return p # Actual compilation on cache miss if len(_cache) >= _MAXCACHE: _cache.clear() _cache[cachekey] = p return p
Cela montre que la principale différence entre l'utilisation de re.compile() et la correspondance directe est le timing du processus de compilation. re.compile() force la compilation à se produire avant que la correspondance ne soit effectuée, tandis que la correspondance directe compile l'expression régulière en interne lorsque la fonction de correspondance est appelée.
Conclusion
Bien que la précompilation d'expressions régulières avec re.compile() ne semble pas offrir des gains de performances significatifs, elle peut être utile pour organiser et nommer des modèles réutilisables. Cependant, il est important de savoir que Python met en cache les expressions régulières compilées en interne, ce qui réduit potentiellement l'avantage perçu de la pré-compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!