Почему это 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

2022-11-21T14:54:47+00:00