Итак, это вещь CPython, не совсем уверенная, что она имеет такое же поведение с другими реализациями.
Но '{0}'.format()
быстрее, чем str()
и '{}'.format()
. Я отправляю результаты из Python 3.5.2, но, я пробовал его с Python 2.7.12, и тренд тот же.
%timeit q=['{0}'.format(i) for i in range(100, 100000, 100)]
%timeit q=[str(i) for i in range(100, 100000, 100)]
%timeit q=['{}'.format(i) for i in range(100, 100000, 100)]
1000 loops, best of 3: 231 µs per loop
1000 loops, best of 3: 298 µs per loop
1000 loops, best of 3: 434 µs per loop
Из docs в object.__str__(self)
Вызывается
str(object)
и встроенными функциямиformat()
иprint()
для вычисления "неформального" или красиво печатаемого строкового представления объекта.
Итак, str()
и format()
вызывают тот же метод object.__str__(self)
, но откуда эта разница в скорости?
UPDATE
как @StefanPochmann и @Leon отметили в комментариях, они получают разные результаты. Я попытался запустить его с помощью python -m timeit "..."
, и они правы, потому что результаты:
$ python3 -m timeit "['{0}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 441 usec per loop
$ python3 -m timeit "[str(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 297 usec per loop
$ python3 -m timeit "['{}'.format(i) for i in range(100, 100000, 100)]"
1000 loops, best of 3: 420 usec per loop
Итак, похоже, что IPython делает что-то странное...
НОВЫЙ ВОПРОС. Каков предпочтительный способ преобразования объекта в str
по скорости?