Что заставило сообщество python принять решение, отличное от python3

Python

Когда я впервые изучил python, я был очень озадачен тем, почему python2 и python3 должны существовать одновременно.printЭто другое? Разве это не немного отличается в кодировании? Зачем так разделяться?

Есть вопрос и ответ по Жиху:Каковы основные различия между Python 2 и Python 3?После его прочтения в большинстве ответов было указано «какие различия в синтаксисе и функциях между python2 и python3» или «какие улучшения были сделаны в python3 по сравнению с python2». Я не буду составлять эти списки, я попытаюсь ответить на этот вопрос:По какой причине сообщество python приняло решение, отличное от python3?

0x01 Несколько важных моментов времени разработки

  1. Опубликован стандарт ASCII 1968 г.
  • В этот период компьютеры почти всегда были 8-битными.
  • Числовые значения (0 - 127) соответствуют символам один за другим, например, числовое значение, соответствующее символу «а», соответствует
  • ASCII предназначен только для американцев, что означает, что другие языковые системы не поддерживаются.
  1. Гвидо начал разрабатывать язык Python в 1989 году и официально выпустил первую версию в феврале 1991 года.
  2. Выпущен стандарт Unicode в августе 1991 г.
  • Используйте 16 бит, что означает, что можно сохранить 65 536 различных символов.
  • Это также наиболее широко используемый стандарт кодирования.
  1. В 2004 году сообщество python начало планировать python3.

Из этого вы можете увидеть ключевой момент:Когда python был официально выпущен, стандарт юникода еще не появился, в более позднем процессе разработки python, действительноДобавлена ​​поддержка юникода, но это только дополнительная функция, а не обязательная!

0x02 неопределенность объекта python2 str

'abcd'

Если бы вы были пользователем python3, вы бы сказали, что это строка, содержащая «a», «b», «c» и «d».

Если вы пользователь python2, вы можете сказать, что это строка, содержащая «a», «b», «c» и «d», или вы можете сказать, что это 97, 98, 99 и 100 байт.

Это означает, что вы должны быть достаточно осторожны, чтобыstrЯвляется ли объект текстом илиbytes, иначе вы можете закопать ошибки в своем коде.

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

0x03 Философские соображения

Разработка любой системы для всех требует предельной осторожности на атомарном уровне.

Типы данных — это самые основные компоненты языка программирования.С философской точки зрения неопределенность атомов, из которых состоит здание, неприемлема!

питон цикадаВ нем есть фраза:

Должен быть один — и желательно только один — очевидный способ сделать это.

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

разработчик ядра PythonBrett Cannonв одной из своих статейWhy Python 3 existsсказал:

And we made the change when we did because we figured the sooner the better.

the sooner the better, чем раньше вы должны что-то сделать, тем лучше.

Однако он также сказал, что такое большое «обратно несовместимое» изменение с python2 на python3 не должно повторяться, потому что это действительно недружественно для разработчиков.

0x04 Суммировать

  1. Неоднозначность объектов Python2 str, этоДвусмысленность на атомарном уровне недопустима.
  2. Юникод Python2 является необязательным, не обязательным,Факультативный означает, что кто-то не выбирает. Python3 начал поддерживать юникод по умолчанию.
  3. the sooner the better, должны сделать как можно скорее.

Добро пожаловать, чтобы обратить внимание на личный публичный аккаунт WeChat: личный блог, которого нет в полном стеке:lcj.im