Поведение индексации байтовых массивов в python 3 - PullRequest
1 голос
/ 27 мая 2020

Находим это:

import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
b'\n' == b'\n'
True # well obviously
b'\n'[-1] == b'\n'
False # huh?
bytes(b'\n'[-1]) == b'\n'
False
b'\n'[-1] == 10
True

Кажется, что при индексировании в массиве байтов мы получаем целочисленное значение - почему это и как мне сравнивать значения, поэтому мне не нужно подключать Значение ascii элемента строки байтов явно?

1 Ответ

1 голос
/ 27 мая 2020

Когда вы выполняете b'\n', вы создаете экземпляр байтов, содержащий одно значение 10.
Когда вы обращаетесь к элементу экземпляра байтов, возвращается int, как ожидалось (байт - это 8-битный беззнаковый int).

Таким образом, b'\n'[-1] == b'\n' имеет смысл False, значение 10 отличается от экземпляра bytes, содержащего один байт

Когда вы используете конструктор bytes с int, он создает экземпляр заполненных нулями байтов размера, который вы указали в качестве входных данных (python do c).

Таким образом, bytes(b'\n'[-1]) == b'\n' также имеет смысл, список из 10 байтов значений 0 не равен списку только байтов значения 10.

Надеюсь, это поможет

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