我看到str.endswith
方法允许suffix
参数为 字符串元组 :
Docstring:
S.endswith(suffix[, start[, end]]) -> bool
Return True if S ends with the specified suffix, False otherwise.
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
suffix can also be a tuple of strings to try.
所以我猜它还接受 字符串列表 或其他一些 iterables ,但是当我尝试过,传递一个列表会引发错误:
In [300]: s='aaa'
In [301]: s.endswith(('a', 'b'))
Out[301]: True
In [302]: s.endswith(['a', 'b'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-302-d70816089fed> in <module>()
----> 1 s.endswith(['a', 'b'])
TypeError: endswith first arg must be str, unicode, or tuple, not list
那么为什么它只接受 字符串元组 ?
答案 0 :(得分:3)
由于历史原因,可能str.startswith
和str.endswith
仅接受tuples
而不接受lists
:isinstance
自12月21日以来的工作方式相同,2001年(Python 2.2发布的那一天)。
以下是startswith / endwith feature request的摘录:
与例外可以指定元组类型的方式相同 和 isinstance 可以使用类型的元组,str.startswith和endswith 可以采用可能的前缀/后缀的元组。
答案 1 :(得分:3)
答案 2 :(得分:2)
API简单地回应isinstance()
和except (Exception1, Exception2)
语法,它们也只接受元组。
异常可以指定类型的元组,并且isinstance可以采用类型元组,str.startswith和endswith可以采用可能的前缀/后缀元组。
没有理由代码不能支持任意的非字符串迭代(产生字符串)。如果您对此有强烈的感觉,可以在Python issue tracker中提交功能请求。但是,知道Guido van Rossum已经stated that they are not interested in changing this:
总而言之,我希望你会放弃对这个功能的推动。它只是 看起来并不那么重要,你真的只是移动了 不一致的地方(特殊套管字符串而不是 元组)。