Python3 теряет производительность по сравнению с python2 при расчете длины прочности?

Я заметил снижение производительности при вычислении длины строки при профилировании моего перенесенного кода с python2 на python3. См. Тестовый пример ниже.

Есть ли способ заставить реализацию python3 соответствовать производительности python2?

Обратите внимание, что nsec = 1000 * usec

python2 -m timeit -n 10000000 "len('foo')"
> 10000000 loops, best of 3: 0.0294 usec per loop

python3 -m timeit -n 10000000 "len('foo')"
> 10000000 loops, best of 5: 44.1 nsec per loop (0.0441 usec)

Разница почти незначительна, и оба гарантируют постоянное время. Почему тебя это беспокоит? В любом случае, без серьезного взлома вы ничего не можете поделать с реализацией list.__len__, которая в любом случае, вероятно, представляет собой простой доступ к атрибутам.

juanpa.arrivillaga 26.10.2018 20:09

Интерфейс стал медленнее, почему вам все равно?

Josh Hibschman 26.10.2018 20:11

Потому что это незначительный. Это никак не повлияет на общую производительность моего кода. Почему меня волнует бы?

juanpa.arrivillaga 26.10.2018 20:12

В любом случае, вероятно, это связано с изменениями функции len, а не list.__len__, хотя я только догадываюсь. Вероятно, len выполняет больше / разные проверки работоспособности в Python 3.

juanpa.arrivillaga 26.10.2018 20:13

Фу. Извините, str.__len__, и на самом деле этот может на самом деле связан с различиями в str.__len__, поскольку str в Python2 эквивалентен bytes в Python 3. Попробуйте использовать литерал Unicode в коде Python 2, поэтому "len(u'foo')"

juanpa.arrivillaga 26.10.2018 20:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
54
0

Другие вопросы по теме