Я читаю Автостопом по Python и есть короткий фрагмент кода
foo = 'foo'
bar = 'bar'
foobar = foo + bar # This is good
foo += 'ooo' # This is bad, instead you should do:
foo = ''.join([foo, 'ooo'])
Автор указал, что ''.join()
не всегда быстрее, чем +
, поэтому он не против использования +
для конкатенации строк.
Но почему foo += 'ooo'
считается плохой практикой, а foobar=foo+bar
считается хорошей?
foo += bar
хорошо?foo = foo + 'ooo'
хорошо?
Перед этим фрагментом кода автор написал:
Последнее, что нужно упомянуть о строках, это то, что использование join() не всегда лучше. В случаях, когда вы создаете новую строку из заранее определенного количества строк, использование оператора сложения на самом деле быстрее, но в случаях, подобных приведенным выше, или в случаях, когда вы добавляете к существующей строке, использование join() должно быть предпочитаемый вами метод.
foo + bar
иfoo += bar
нет технической разницы, но, видимо, дляfoo += 'ooo'
она есть.. - person Martijn Pieters   schedule 24.09.2016+
по сравнению с''.join()
. Здесь сравниваются два способа использования+
. - person nos   schedule 24.09.2016str.join()
не всегда лучше,foobar = ''.join(foo, bar)
на самом деле не лучше, чемfoobar = foo + bar
. Если вы посмотрите на весь контекст из утверждения более ясно, что оно упоминается как исключение для рекомендации, чтоjoin()
предпочтительнее+=
в большинстве случаев. Приведенный пример, вероятно, можно было бы улучшить. - person mata   schedule 24.09.2016foo = ''.join([foo, 'ooo'])
в этом примере кажется слишком чрезмерным. Он не только хуже читается, но и в 100 раз медленнее, чем другие примеры, согласно некоторым тестам с модулем timeit. - person Ted Klein Bergman   schedule 24.09.2016foo += 'ooo'
... Важно отметить, что автор «Руководства для автостопщиков» говорит о хорошем и плохом с точки зрения производительности: гораздо эффективнее собирать части в список , который можно изменить, а затем склеить («объединить») части вместе, когда потребуется полная строка - person Carlos Mermingas   schedule 24.09.2016