Когда я впервые изучил python, я был очень озадачен тем, почему python2 и python3 должны существовать одновременно.print
Это другое? Разве это не немного отличается в кодировании? Зачем так разделяться?
Есть вопрос и ответ по Жиху:Каковы основные различия между Python 2 и Python 3?После его прочтения в большинстве ответов было указано «какие различия в синтаксисе и функциях между python2 и python3» или «какие улучшения были сделаны в python3 по сравнению с python2». Я не буду составлять эти списки, я попытаюсь ответить на этот вопрос:По какой причине сообщество python приняло решение, отличное от python3?
0x01 Несколько важных моментов времени разработки
- Опубликован стандарт ASCII 1968 г.
- В этот период компьютеры почти всегда были 8-битными.
- Числовые значения (0 - 127) соответствуют символам один за другим, например, числовое значение, соответствующее символу «а», соответствует
- ASCII предназначен только для американцев, что означает, что другие языковые системы не поддерживаются.
- Гвидо начал разрабатывать язык Python в 1989 году и официально выпустил первую версию в феврале 1991 года.
- Выпущен стандарт Unicode в августе 1991 г.
- Используйте 16 бит, что означает, что можно сохранить 65 536 различных символов.
- Это также наиболее широко используемый стандарт кодирования.
- В 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 Суммировать
- Неоднозначность объектов Python2 str, этоДвусмысленность на атомарном уровне недопустима.
- Юникод Python2 является необязательным, не обязательным,Факультативный означает, что кто-то не выбирает. Python3 начал поддерживать юникод по умолчанию.
- the sooner the better, должны сделать как можно скорее.
Добро пожаловать, чтобы обратить внимание на личный публичный аккаунт WeChat: личный блог, которого нет в полном стеке:lcj.im