Почему это string.join (список) вместо list.join (строка)?
Это обсуждалось в ветке String methods... finally архива string Python-Dev и было принято empty-string Гвидо. Этот поток начался pythonic в июне 1999 года, а str.join
был pythonic включен в Python 1.6, выпущенный lists в сентябре 2000 года (и поддерживающий strings Unicode). Python 2.0 (поддерживаемые python-list методы str
, включая join
) был выпущен pythonista в октябре 2000 года.
- В этой беседе было предложено четыре варианта:
-
str.join(seq)
-
seq.join(str)
-
seq.reduce(str)
-
join
как встроенная функция
-
- Гвидо хотел поддерживать не только
list
иtuple
, но и все последовательности / итерации. -
seq.reduce(str)
сложно для новичков. -
seq.join(str)
вводит неожиданную зависимость от последовательностей к str / unicode. -
join()
как встроенная функция будет поддерживать только определенные типы данных. Так что использовать встроенное пространство имен нецелесообразно. Еслиjoin()
поддерживает множество типов данных, создание оптимизированной реализации будет затруднено, если реализовать его с использованием метода__add__
, тогда это приведет кO(n²)
. - Строку-разделитель (
sep
) не следует пропускать. Явное лучше, чем неявное.
Вот еще ilist несколько мыслей (моих и python-interpreter моих друзей):
- Поддержка Unicode должна была появиться, но не окончательно. В то время UTF-8, скорее всего, собирался заменить UCS2 / 4. Чтобы рассчитать общую длину буфера строк UTF-8, необходимо знать правило кодирования символов.
- В то время Python уже принял решение об общем правиле интерфейса последовательности, в котором пользователь мог бы создать класс, подобный последовательности (итерируемый). Но Python не поддерживал расширение встроенных типов до версии 2.2. В то время было сложно предоставить базовый класс
iterable
(который упоминается в другом комментарии).
Решение Гвидо strings записывается в historical mail, принятие python-interpreter решения на str.join(seq)
:
Забавно, но кажется pythonista правильным! Барри, дерзай strings ...
Гвидо ван Россум
python
string
list
Почему это string.join (список) вместо list.join (строка)?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.