Как работает представление байтов .__ repr__? - PullRequest
0 голосов
/ 25 января 2019

bytes являются неизменяемыми последовательностями целых чисел в диапазоне 0 <= x <256. </p>

Как работает bytes.__repr__?

Почему \x иногда используется для экранирования, а в другое - не используется?например, bytes([118, 255]) отображается как b'v\xff' только с одним \x.Я понимаю, что \x используется для передачи значений, выходящих за пределы диапазона ASCII?Здесь что-нибудь еще происходит?

Я ищу подробное объяснение того, как это работает?Может быть, даже указать мне исходный код CPython для этих функций.

Спасибо

1 Ответ

0 голосов
/ 25 января 2019

Код интереса, кажется, это :

if (c == quote || c == '\\')
    *p++ = '\\', *p++ = c;
else if (c == '\t')
    *p++ = '\\', *p++ = 't';
else if (c == '\n')
    *p++ = '\\', *p++ = 'n';
else if (c == '\r')
    *p++ = '\\', *p++ = 'r';
else if (c < ' ' || c >= 0x7f) {
    *p++ = '\\';
    *p++ = 'x';
    *p++ = Py_hexdigits[(c & 0xf0) >> 4];
    *p++ = Py_hexdigits[c & 0xf];
}
else
    *p++ = c;

Если c < ' ' || c >= 0x7f, используется escape-последовательность с \x. (0x7f - 127, кстати). Все до ' ' в таблице ASCII является специальным символом. См. http://www.asciitable.com/. Все в первом столбце будет экранировано repr. Обратите внимание, что обратные слэши, кавычки, разрывы строк, возврат каретки и табуляция считаются особыми случаями.

...