Dupliquer possible:
La notation de tranche Python
J'essaie de porter du code Python en C, mais je suis tombé sur cette ligne et je ne comprends pas ce que cela signifie
if message.startswith('<stream:stream'):
message = message[:-1] + ' />'
Je comprends que si 'message
commence par <stream:stream
, il faut ajouter quelque chose. Cependant, je n'arrive pas à comprendre où il devrait être ajouté. Je n'ai absolument aucune idée de ce que :-1
indique. J'ai fait plusieurs recherches sur Google sans résultat.
Quelqu'un serait-il assez aimable pour expliquer ce que cela fait?
C'est une liste d'indexation, elle renvoie tous les éléments [:]
sauf le dernier -1
. Question similaire ici
Par exemple,
>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]
Ça marche comme ça
a[start:end]
>>> a[1:2]
[2]
a[start:]
>>> a[1:]
[2, 3, 4, 5, 6]
a[:end]
Ton cas
>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]
a[:]
>>> a[:]
[1, 2, 3, 4, 5, 6]
Cela s'appelle le découpage en tranches et renvoie tout ce qui est de message
sauf le dernier élément.
Le meilleur moyen de comprendre ceci est avec exemple:
In [1]: [1, 2, 3, 4][:-1]
Out[1]: [1, 2, 3]
In [2]: "Hello"[:-1]
Out[2]: "Hell"
Vous pouvez toujours remplacer -1
par un nombre quelconque:
In [4]: "Hello World"[:2] # Indexes starting from 0
Out[4]: "He"
Le dernier index n'est pas inclus.
Ça s'appelle slicing
"Retourne un objet slice représentant l’ensemble des index spécifiés par range (start, stop, step)."
- depuis ce lien: http://docs.python.org/2/library/functions.html#slice
Vous remarquerez qu'il est similaire aux arguments de plage et que la partie :
renvoie la totalité de l'itération, de sorte que -1
est tout sauf le dernier index.
Voici quelques fonctionnalités de base du découpage en tranches:
>>> s = 'Hello, World'
>>> s[:-1]
'Hello, Worl'
>>> s[:]
'Hello, World'
>>> s[1:]
'Ello, World'
>>> s[5]
','
>>>
Suit ces arguments:
a[start:stop:step]
Ou
a[start:stop, i]
Il retourne message
sans le dernier élément. Si message
est une chaîne, message[:-1]
supprime le dernier caractère.
Voir le tutoriel .
Pour répondre directement à votre cas:
if message.startswith('<stream:stream'): message = message[:-1] + ' />'
En gros, cela vérifie si message
commence par <stream:stream
et, dans ce cas, il lâchera le dernier caractère et ajoutera un ' />'
à la place.
Ainsi, comme votre message est une chaîne XML, l'élément sera vide et se fermera.