Итак, это вещь 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 по скорости?