2.4. Chaînes de caractères

Une chaîne de caractères est une séquence de caractères Unicode écrite entre guillemets. Les guillemets simples et doubles sont équivalents – choisissez le style qui vous évite d’avoir à échapper les guillemets présents à l’intérieur du texte :

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

Les chaînes entre triples guillemets ("""...""" ou '''...''') s’étendent sur plusieurs lignes et conservent les sauts de ligne tels quels :

banner = """boot ok
firmware v1.28
"""
print(banner)

Sortie

boot ok
firmware v1.28

2.4.1. Séquences d’échappement

À l’intérieur d’une chaîne ordinaire, \ introduit un caractère spécial :

  • \n – saut de ligne

  • \t – tabulation

  • \\ – une barre oblique inverse littérale

  • \' / \" – un guillemet littéral (lorsqu’il terminerait sinon la chaîne)

  • \xHH – le caractère dont le code hexadécimal est HH

  • \uHHHH – le point de code Unicode HHHH

Lorsqu’une chaîne contient de nombreuses barres obliques inverses, préfixez la chaîne littérale avec r pour en faire une chaîne brute (raw). Les barres obliques inverses sont alors prises au pied de la lettre – \n reste deux caractères au lieu d’être remplacé par un saut de ligne :

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. Concaténation et répétition

Deux chaînes se joignent avec + ; une chaîne se répète avec * :

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

L’utilisation répétée de + dans une boucle alloue une nouvelle chaîne à chaque itération. Pour construire de plus grandes chaînes à partir de nombreux morceaux, utilisez str.join().

2.4.3. Longueur, indexation et découpage

len() renvoie le nombre de caractères d’une chaîne. L’indexation avec [] renvoie une chaîne d’un caractère à la position donnée ; les indices négatifs comptent à partir de la fin :

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

Une tranche s[start:stop] renvoie la sous-chaîne allant de la position start jusqu’à stop exclu. Chacune des deux bornes peut être omise pour signifier « le début » ou « la fin », et une troisième valeur optionnelle s[start:stop:step] vous permet de sauter des caractères.

La chaîne « OpenMV » avec des marqueurs de position entre chaque caractère, illustrant comment une tranche sélectionne les caractères situés entre deux positions.

Les positions des tranches se situent entre les caractères. s[2:5] sélectionne les caractères aux positions 2, 3 et 4.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

Une tranche hors limites renvoie silencieusement la portion qui existe – s[100:200] est la chaîne vide "", et non une erreur. L’indexation hors limites, en revanche, lève IndexError.

2.4.4. Immuabilité

Les chaînes ne peuvent pas être modifiées sur place. Les opérations qui semblent muter une chaîne renvoient en réalité une nouvelle chaîne et laissent l’originale inchangée :

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

Pour « changer » une chaîne, réassociez le nom à la nouvelle valeur : name = name.upper().