2008-12-06 7 views
3

dire que je n'avais besoin d'utiliser findall() du module re, est-il plus efficace de le faire:Est-il plus efficace d'utiliser "import <module>" ou "de <module> importer <func>"?

from re import findall 

ou

import re 

Y at-il réellement une différence dans l'utilisation de vitesse/mémoire etc?

+0

L'optimisation prématurée est mauvaise. S'il vous plaît fournir une chose spécifique à optimiser. La couverture «est plus efficace» Les questions n'ont pas de sens sans un morceau de code spécifique à mesurer. –

Répondre

10

Il n'y a pas de différence sur l'importation, cependant il y a une petite différence d'accès.

Lorsque vous accédez à la fonction comme

re.findall() 

python devra trouver d'abord le module dans la portée globale et trouver findall dans les modules dict. Peut faire la différence si vous l'appelez en boucle des milliers de fois.

+3

+1, mais notez également que Python recherchera l'espace de noms local avant les espaces de noms globaux, donc créer une fonction locale (findall = re.findall) qui référence la fonction est la meilleure, et fonctionne de manière identique avec les deux styles d'import. – Tom

3

Il n'y a pas de différence, sauf pour les noms de re qui sont visibles dans votre espace de noms local après l'importation.

8

En cas de doute, temps:

from timeit import Timer 

print Timer("""re.findall(r"\d+", "fg12f 1414 21af 144")""", "import re").timeit() 
print Timer("""findall(r"\d+", "fg12f 1414 21af 144")""", "from re import findall").timeit() 

Je reçois les résultats suivants, en utilisant le minimum de 5 répétitions de 10.000.000 appels:

re.findall(): 123.444600105 
findall(): 122.056155205 

Il semble y avoir un avantage d'utilisation très légère à utiliser findall() directement, plutôt que re.findall().

Cependant, les instructions d'importation réelles diffèrent considérablement dans leur vitesse. Sur mon ordinateur, je reçois les résultats suivants:

>>> Timer("import re").timeit() 
2.39156508446 
>>> Timer("from re import findall").timeit() 
4.41387701035 

Alors import re semble être à peu près aussi rapide pour exécuter deux fois. Vraisemblablement, cependant, l'exécution du code importé est votre goulot d'étranglement, plutôt que l'importation réelle.

+0

Quand allez-vous importer quelque chose 1 million de fois ??? – hop

+1

Je pense que c'est ce que j'essayais de dire ... – Noah

Questions connexes