Я использую Одиночные элементы в качестве теста интервью.
то, Когда я прошу, чтобы разработчик назвал некоторые шаблоны разработки, если все они могут назвать, является Singleton, они не наняты.
НЕТ ИЗМЕНЕНИЙ во внутреннем представлении Unicode между Python 2.X и 3.X.
Это определенно НЕ UTF-16. UTF-something является байтовым ВНЕШНИМ представлением.
Каждой кодовой единице (символу, суррогату и т. Д.) Присвоен номер из диапазона (0, 2 ** 21). Это называется его «порядковым номером».
Действительно, процитированная вами документация говорит сама за себя. Большинство двоичных файлов Python используют 16-битные порядковые номера, что ограничивает вас базовой многоязычной плоскостью («BMP»). ), если вы не хотите возиться с суррогатами (удобно, если вы не можете найти свою рубашку для волос, а ваше ложе с гвоздями не заржавело). Для работы с полным репертуаром Unicode вы бы предпочли «широкую сборку» (32 бита).
Вкратце, внутреннее представление в объекте Unicode - это массив 16-разрядных целых чисел без знака или массив 32-разрядных целых чисел без знака (используя только 21 бит).
Это зависит: см. здесь . Это по-прежнему верно для Python 3 в том, что касается внутреннего представления.
Я думаю, трудно судить о разнице между UTF-16, который представляет собой всего лишь последовательность 16-битных слов, и строковым объектом Python.
И если python скомпилирован с Unicode = UCS4 вариант, это будет сравнение между строкой UTF-32 и Python.
Итак, лучше подумайте, они находятся в разных категориях, хотя вы можете преобразовывать друг друга.
Изучите исходный код CPython 3.1.5 в Include / unicodeobject.h
:
/* --- Unicode Type ------------------------------------------------------- */
typedef struct {
PyObject_HEAD
Py_ssize_t length; /* Length of raw Unicode data in buffer */
Py_UNICODE *str; /* Raw Unicode buffer */
long hash; /* Hash value; -1 if not set */
int state; /* != 0 if interned. In this case the two
* references from the dictionary to this object
* are *not* counted in ob_refcnt. */
PyObject *defenc; /* (Default) Encoded version as Python
string, or NULL; this is used for
implementing the buffer protocol */
} PyUnicodeObject;
Символы хранятся в виде массива Py_UNICODE
. Я считаю, что на большинстве платформ Py_UNICODE
равно #define
d as wchar_t
.