Я загрузил альфа-версию Python 3.6 из репозитория Python Github, и одна из моих любимых новых функций - это буквальное форматирование строк. Его можно использовать так:
>>> x = 2
>>> f"x is {x}"
"x is 2"
Это похоже на то, что используется функция format
на экземпляре str
. Тем не менее, одна вещь, которую я заметил, это то, что это буквальное форматирование строки на самом деле очень медленное по сравнению с просто вызовом format
. Здесь timeit
говорит о каждом методе:
>>> x = 2
>>> timeit.timeit(lambda: f"X is {x}")
0.8658502227130764
>>> timeit.timeit(lambda: "X is {}".format(x))
0.5500578542015617
Если я использую строку как аргумент timeit
, мои результаты все еще показывают шаблон:
>>> timeit.timeit('x = 2; f"X is {x}"')
0.5786435347381484
>>> timeit.timeit('x = 2; "X is {}".format(x)')
0.4145195760771685
Как вы можете видеть, использование format
занимает почти половину времени. Я ожидал бы, что литеральный метод будет быстрее, потому что задействован меньший синтаксис. Что происходит за кулисами, из-за чего литеральный метод становится намного медленнее?