我正在尝试将一些Python代码移植到C,但我遇到了这一行,我无法弄清楚它的含义:
if message.startswith('<stream:stream'):
message = message[:-1] + ' />'
我理解,如果'message
以<stream:stream
开头,则需要附加某些内容。但是,我似乎无法弄清楚它应该附加在哪里。我完全不知道:-1
表示什么。我做了几次Google搜索而没有结果。
有人会如此善意地解释这是做什么的吗?
答案 0 :(得分:33)
它是列表索引,它返回除最后一个[:]
之外的所有元素-1
。类似的问题here
例如,
>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]
它像这样工作
a[start:end]
>>> a[1:2]
[2]
a[start:]
>>> a[1:]
[2, 3, 4, 5, 6]
a[:end]
你的案子
>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]
a[:]
>>> a[:]
[1, 2, 3, 4, 5, 6]
答案 1 :(得分:4)
它被称为切片,它返回message
但最后一个元素的所有内容。
了解这一点的最佳方法是举例:
In [1]: [1, 2, 3, 4][:-1]
Out[1]: [1, 2, 3]
In [2]: "Hello"[:-1]
Out[2]: "Hell"
您始终可以使用任意数字替换-1
:
In [4]: "Hello World"[:2] # Indexes starting from 0
Out[4]: "He"
不包括最后一个索引。
答案 2 :(得分:2)
它被称为slicing
“返回表示由范围(开始,停止,步骤)指定的索引集的切片对象。”
- 从这个链接:http://docs.python.org/2/library/functions.html#slice
您会注意到它与范围参数类似,:
部分返回整个可迭代,因此-1
是除最后一个索引之外的所有内容。
以下是切片的一些基本功能:
>>> s = 'Hello, World'
>>> s[:-1]
'Hello, Worl'
>>> s[:]
'Hello, World'
>>> s[1:]
'ello, World'
>>> s[5]
','
>>>
遵循以下论点:
a[start:stop:step]
或者
a[start:stop, i]
答案 3 :(得分:0)
它返回message
而没有最后一个元素。如果message
是字符串,则message[:-1]
会删除最后一个字符。
请参阅the tutorial。
答案 4 :(得分:0)
直接回答您的案件:
if message.startswith('<stream:stream'): message = message[:-1] + ' />'
这基本上会检查message
是否以<stream:stream
开头,如果是这种情况,则会删除最后一个字符并添加' />'
。
因此,由于您的消息是XML字符串,它将使元素成为一个空元素,自行关闭。