Maison >développement back-end >Tutoriel Python >Pourquoi `.join()` produit-il des résultats inattendus lors de la concaténation d'une chaîne et d'un objet de type octets ?

Pourquoi `.join()` produit-il des résultats inattendus lors de la concaténation d'une chaîne et d'un objet de type octets ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 13:26:02439parcourir

Why Does `.join()` Produce Unexpected Results When Concatenating a String and a Bytes-like Object?

Qu'est-ce que .join() et comment fonctionne-t-il dans la concaténation de chaînes ?

La méthode .join() de Python est couramment utilisée pour les chaînes enchaînement. Cependant, en testant l’exemple fourni, il a donné des résultats inattendus. Comprendre le but et l'utilisation de cette méthode peut clarifier pourquoi elle s'est comportée comme elle l'a fait.

La méthode .join() opère sur une chaîne et prend un itérable d'éléments comme argument. Il insère la chaîne spécifiée entre chaque élément de l'itérable lors de la concaténation.

Par exemple :

",".join(["a", "b", "c"])
# Output: 'a,b,c'

Dans l'exemple fourni :

array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)

Le tostring() La méthode convertit le tableau de caractères en un objet de type octets. Cet objet de type octets est ensuite utilisé comme entrée pour .join() avec la chaîne "595".

Cependant, le point clé à comprendre est que la chaîne "595" est traitée comme une liste de ses caractères individuels, c'est-à-dire ["5", "9", "5"]. Par conséquent, ".join()" opère sur cette liste, en insérant l'objet de type octet entre chaque caractère :

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Chaque "5", "9", "5" dans la sortie indique l'insertion de l'objet de type octet entre les caractères de la chaîne d'origine.

Pour obtenir la concaténation souhaitée, l'opérateur peut être utilisé à la place :

array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

Cette approche concatène directement l'objet de type octet objet avec la chaîne "595", produisant le résultat souhaité sans aucune insertion entre les caractères.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn