Pourquoi est-str.traduire beaucoup plus rapide en Python de 3,5 par rapport à Python 3.4?

J'ai essayé de supprimer les caractères d'une chaîne à l'aide de text.translate() en Python 3.4.

Le code minimal est:

import sys 
s = 'abcde12345@#@$#%$'
mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$')
print(s.translate(mapper))

Qu'il fonctionne comme prévu. Cependant, le même programme lors de l'exécution en Python Python 3.4 et 3.5 donne une grande différence.

Le code pour calculer les temps est

python3 -m timeit -s "import sys;s = 'abcde12345@#@$#%$'*1000 ; mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$'); "   "s.translate(mapper)"

Le Python 3.4 programme prend 1.3 ms alors que le même programme en Python 3.5 prend seulement 26.4 µs.

Ce qui a amélioré en Python 3.5 qui le rend plus rapide par rapport à Python 3.4?

  • Tandis que nous parlons de la performance, ne serait-il pas préférable de générer votre mapper comme ceci: dict.fromkeys(ord(c) for c in '@#$')?
  • J'ai trouvé que cela fait une différence importante. Yep votre chemin, c'est mieux.
  • Vouliez-vous dire 50x plus rapide?
  • Je n'ai 1300 - 26.4 et ensuite divisé en 1300. J'ai obtenu près de 95%, donc j'ai écrit 🙂 C'est effectivement plus de 50x plus rapide... Mais c'est mon calcul de mal? Je suis peu faible en mathématiques. Je vais apprendre les mathématiques bientôt. 🙂
  • vous devriez en faire le tour: 26 / 1300 = 2% de plus pour la version plus rapide ne prend que 2% du temps pris par la version la plus lente => c'est 50x plus rapide.
InformationsquelleAutor Bhargav Rao | 2015-12-15