str.endswith(suffix [,start [,end]])
如果字符串以指定的后缀结束,则返回True,否则返回False。后缀也可以是要查找的后缀元组。通过可选的启动,从该位置开始测试。随意结束,在该位置停止比较。
在版本2.5中更改:接受元组作为后缀。
以下代码应返回True
,但它在Python 2.7.3中返回False
:
"hello-".endswith(('.', ',', ':', ';', '-' '?', '!'))
似乎str.endswith()
忽略了第四个元组之外的任何内容:
>>> "hello-".endswith(('.', ',', ':', '-', ';' '?', '!'))
>>> True
>>> "hello;".endswith(('.', ',', ':', '-', ';' '?', '!'))
>>> False
我发现了一个错误,或者我遗失了什么?
答案 0 :(得分:10)
或者我错过了什么?
你的元组中的';'
后面缺少逗号:
>>> "hello;".endswith(('.', ',', ':', '-', ';' '?', '!'))
# ^
# comma missing
False
因此,;
和?
会连接在一起。因此,对于这种情况,以;?
结尾的字符串将返回True
:
>>> "hello;?".endswith(('.', ',', ':', '-', ';' '?', '!'))
True
添加逗号后,它会按预期工作:
>>> "hello;".endswith(('.', ',', ':', '-', ';', '?', '!'))
True
答案 1 :(得分:0)
如果你把元组写为
>>> tuple_example = ('.', ',', ':', '-', ';' '?', '!')
然后元组将成为
>>> tuple_example
('.', ',', ':', '-', ';?', '!')
^
# concatenate together
这就是为什么返回False
答案 2 :(得分:0)
已经指出相邻的字符串文字是连接的,但我想添加一些额外的信息和上下文。
这是与C共享(并借用)的功能。
此外,这不像“+”这样的连接运算符,并且被视为完全相同,就好像它们在源中字面连接在一起而没有任何额外的开销。
例如:
>>> 'a' 'b' * 2
'abab'
这是有用的功能还是恼人的设计实际上是一个意见问题,但它确实允许通过将文字封装在括号内来分解多行中的字符串文字。
>>> print("I don't want to type this whole string"
"literal all on one line.")
I don't want to type this whole stringliteral all on one line.
这种用法(以及与#defines一起使用)是它首先在C中有用并随后在Python中使用的原因。