W kodzie źródłowym Pythona, na który natknąłem się, widziałem małe b przed ciągiem znaków, jak w:
b"abcdef"
Wiem o u
prefiksie oznaczającym ciąg znaków Unicode i r
prefiksie dla surowego literału ciągu.
Co to b
oznacza iw jakim rodzaju kodu źródłowego jest przydatny, ponieważ wydaje się być dokładnie taki sam, jak zwykły ciąg bez żadnego przedrostka?
python
syntax
python-3.x
byte
kriss
źródło
źródło
Odpowiedzi:
To jest
bytes
dosłowny język Python3 . Ten przedrostek jest nieobecny w Pythonie 2.5 i starszych (jest równoważny zwykłemu ciągowi 2.x, podczas gdy zwykły ciąg 3.x jest równoważny literałowi zu
prefiksem w 2.x). W Pythonie 2.6+ jest odpowiednikiem zwykłego łańcucha, pod kątem zgodności z 3.x .źródło
b
Prefiks oznacza siębytes
ciągiem znaków .Jeśli widzisz, że jest używany w kodzie źródłowym Python 3, wyrażenie tworzy
bytes
obiekt , a nie zwykły obiekt Unicodestr
. Jeśli zobaczysz, że odbija się to echem w Twojej powłoce Pythona lub jako część listy, dyktu lub innej zawartości kontenera, to zobaczyszbytes
obiekt reprezentowany za pomocą tej notacji.bytes
obiekty zasadniczo zawierają sekwencję liczb całkowitych z zakresu 0-255, ale gdy są reprezentowane, Python wyświetla te bajty jako punkty kodowe ASCII, aby ułatwić odczytanie ich zawartości. Wszelkie bajtów poza druku zakresu znaków ASCII przedstawiono jako sekwencje (na przykład\n
,\x82
i inne). I odwrotnie, do definiowania wartości bajtów można używać zarówno znaków ASCII, jak i sekwencji sterujących; dla wartości ASCII używana jest ich wartość liczbowa (np.b'A'
==b'\x41'
)Ponieważ
bytes
obiekt składa się z sekwencji liczb całkowitych, możesz skonstruowaćbytes
obiekt z dowolnej innej sekwencji liczb całkowitych o wartościach z zakresu 0-255, takich jak lista:a indeksowanie zwraca liczby całkowite (ale wycinanie daje nową
bytes
wartość; w powyższym przykładzievalue[0]
daje72
, alevalue[:1]
wynosib'H'
72 to punkt kodowy ASCII dla dużej litery H ).bytes
modelować dane binarne , w tym zakodowany tekst . Jeśli twojabytes
wartość zawiera tekst, musisz go najpierw zdekodować, używając odpowiedniego kodeka. Jeśli na przykład dane są zakodowane w formacie UTF-8, można uzyskaćstr
wartość Unicode za pomocą:I odwrotnie, aby przejść od tekstu w
str
obiekcie dobytes
kodu, należy go zakodować . Musisz zdecydować, jakiego kodowania użyć; Domyślnie używa się UTF-8, ale to, czego będziesz potrzebować, zależy w dużym stopniu od twojego przypadku użycia:Możesz również użyć konstruktora,
bytes(strvalue, encoding)
aby zrobić to samo.Obie metody dekodowania i kodowania pobierają dodatkowy argument, aby określić, jak powinny być obsługiwane błędy .
Python 2, wersje 2.6 i 2.7 obsługują również tworzenie literałów ciągów przy użyciu
b'..'
składni literałów łańcuchowych, aby ułatwić kod, który działa zarówno w Pythonie 2, jak i 3.bytes
obiekty są niezmienne, podobnie jakstr
łańcuchy. Użyjbytearray()
obiektu, jeśli potrzebujesz mutowalnej wartości bajtów.źródło