Dans un code source python sur lequel je suis tombé par hasard, j'ai vu un petit b avant une chaîne comme dans:
b"abcdef"
Je connais le u
préfixe signifiant une chaîne unicode et le r
préfixe d'un littéral de chaîne brute.
Que signifie le b
code et dans quel type de code source est-il utile car il semble être exactement comme une chaîne simple sans aucun préfixe?
python
syntax
python-3.x
byte
Kriss
la source
la source
Réponses:
C'est
bytes
littéral Python3 . Ce préfixe est absent dans Python 2.5 et plus ancien (il équivaut à une chaîne simple de 2.x, tandis que la chaîne simple de 3.x équivaut à un littéral avec unu
préfixe dans 2.x). En Python 2.6+ , il est équivalent à une chaîne simple, pour la compatibilité avec 3.x .la source
Le
b
préfixe signifie unebytes
chaîne littérale .Si vous le voyez utilisé dans le code source Python 3, l'expression crée un
bytes
objet , pas un objet Unicodestr
normal . Si vous le voyez en écho dans votre shell Python ou dans le cadre d'une liste, d'un dict ou d'un autre contenu de conteneur, vous voyez unbytes
objet représenté à l'aide de cette notation.bytes
Les objets contiennent essentiellement une séquence d'entiers compris entre 0 et 255, mais lorsqu'ils sont représentés, Python affiche ces octets sous forme de points de code ASCII pour faciliter la lecture de leur contenu. Tous les octets en dehors de la printable plage de caractères ASCII sont représentés comme des séquences d'échappement (par exemple\n
,\x82
, etc.). Inversement, vous pouvez utiliser à la fois des caractères ASCII et des séquences d'échappement pour définir des valeurs d'octet; pour les valeurs ASCII, leur valeur numérique est utilisée (par exempleb'A'
==b'\x41'
)Étant donné qu'un
bytes
objet est constitué d'une séquence d'entiers, vous pouvez construire unbytes
objet à partir de n'importe quelle autre séquence d'entiers avec des valeurs comprises entre 0 et 255, comme une liste:et l'indexation vous rend les entiers (mais le découpage produit une nouvelle
bytes
valeur; pour l'exemple ci-dessus,value[0]
vous donne72
, maisvalue[:1]
c'estb'H'
comme 72 est le point de code ASCII pour la lettre majuscule H ).bytes
modèle de données binaires , y compris le texte codé . Si votrebytes
valeur contient du texte, vous devez d'abord le décoder en utilisant le bon codec. Si les données sont encodées en UTF-8, par exemple, vous pouvez obtenir unestr
valeur Unicode avec:Inversement, pour passer du texte dans un
str
objet àbytes
vous devez encoder . Vous devez décider du codage à utiliser; la valeur par défaut est d'utiliser UTF-8, mais ce dont vous aurez besoin dépend fortement de votre cas d'utilisation:Vous pouvez également utiliser le constructeur
bytes(strvalue, encoding)
pour faire de même.Les méthodes de décodage et d'encodage prennent un argument supplémentaire pour spécifier comment les erreurs doivent être gérées .
Python 2, les versions 2.6 et 2.7 prennent également en charge la création de littéraux de chaîne à l'aide de
b'..'
la syntaxe de littéral de chaîne, pour faciliter le code qui fonctionne à la fois sur Python 2 et 3.bytes
les objets sont immuables, tout comme lesstr
chaînes. Utilisez unbytearray()
objet si vous avez besoin d'une valeur d'octets mutable.la source