从技术上讲,没有理由不接受其他序列类型。该源代码大致做到这一点:
if isinstance(prefix, tuple): for substring in prefix: if not isinstance(substring, str): raise TypeError(...) return tailmatch(...)elif not isinstance(prefix, str): raise TypeError(...)return tailmatch(...)
(
tailmatch(...)实际匹配在哪里工作)。
因此,是的,任何可迭代的操作都会对该
for循环起作用。但是,所有其他使用多个值的字符串测试API(以及
isinstance()和
issubclass())也只接受元组,这告诉您作为API的用户可以安全地假定该值
不会被突变 。您不能变异元组,但理论上该方法可以变异列表。
另请注意, 通常 您 要 测试固定数目的前缀或后缀或类(对于
isinstance()和
issubclass());该实现不适用于 大量
元素。元组表示您的元素数量有限,而列表可以任意大。
接下来,如果可以接受任何可迭代或序列类型,则将包括字符串;单个字符串 也是 一个序列。那么,应该将单个字符串参数视为单独的字符还是作为单个前缀?
因此,换句话说,序列不会被更改,与其他API一致,限制了要测试的项目数量以及消除了关于单个字符串的歧义性,这是对自我文档的限制论据应予处理。
注意,这是在“ Python
Ideas”列表中提到的。看到这个线程; Guido van
Rossum的主要论点是,您要么是单个字符串的特殊情况,要么是仅接受一个元组。他选择了后者,因此不需要更改它。



