Я пытался удалить ненужные символы из заданной строки, используя text.translate()
в Python 3.4.
Минимальный код:
import sys
s = '[email protected]#@$#%$'
mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$')
print(s.translate(mapper))
Работает так, как ожидалось. Однако одна и та же программа, выполняемая в Python 3.4 и Python 3.5, дает большую разницу.
Код для расчета таймингов
python3 -m timeit -s "import sys;s = '[email protected]#@$#%$'*1000 ; mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$'); " "s.translate(mapper)"
Программа Python 3.4 принимает 1,3 мс, тогда как одна и та же программа в Python 3.5 принимает только 26.4μs.
Что улучшилось в Python 3.5, что делает его более быстрым по сравнению с Python 3.4?