Эффективная генерация строк в Python3

Всем привет, сегодня расскажу немного об эффективной работе со строками.
Мне однажды понадобилось для реализации небольшой библиотечки побитовых операций над числами заданными в фиксированном битовом представлении (по длинне) сгенерировать строки из единиц определённой длины, и захотелось сделать это быстро. И вот что я получил.

1) Первое что приходит на ум - воспользоваться обычным циклом и операцией конкатенации, примерно так:

s = ''
for i in range(0, 1000000):
    s += '1'

Это самый неэффективный способ генерации строки, он может быть применён если вычисления "прибавляемой" строки довольно сложное, проходит много условных переходов и не факт что вообще при определённых обстоятельствах это значение участвует в конкатенации. Для моей задачи - это было жуууутко медленно.

2) После активного гугления я обнаружил, что операция join для списков работает довольно шустро. И вправду такое работает шустро:

res = ''.join(['1' for i in range(0, 1000000)])

Круто. Но всёже для моей задачи генерировать список, а потом объединять его - это накладно. Для генерации строк, в которых эти значения разные, и если это можно получить генератором - то такой способ самый выгодный, точно выгоднее предыдущего. Но но но.....

3) Третий способ мне подсказали друзья, они провели серию экспериментов - я их подтвердил. Для моей задачи можно воспользоваться всего одним оператором:

s =  '1' * 1000000

Работает в разы быстрее предыдущих вариантов. И самый простой и читаемый.

Надеюсь это поможет вам в эффективном программировании на Python 3.

vedro-compota's picture

задача весьма специфичная))
но и решение весьма неожиданное и изящное во всех смыслах! спасибо!)

_____________
матфак вгу и остальная классика =)