为何Python的removeprefix()定义中使用[:]而非直接返回self?
为什么
removeprefix()用return self[:]而非直接return self? 在PEP-616定义的removeprefix()方法实现里,当字符串不匹配指定前缀时,用self[:]返回结果而非直接返回self,核心是为了保持返回值的对象行为一致性:
- 当字符串匹配前缀时,
self[len(prefix):]会创建并返回一个全新的字符串对象 - 如果else分支直接返回
self,就会返回原字符串的引用,和匹配前缀时的返回行为产生差异 - 使用
self[:]会生成原字符串的副本(尽管字符串是不可变类型,副本和原对象内容完全一致,但二者是不同的对象实例),这样不管有没有移除前缀,方法返回的都是新对象,行为逻辑更统一
可以用一段简单代码验证这个差异:
s = "hello" original_id = id(s) # 移除不存在的前缀 result = s.removeprefix("test") print(id(result) == original_id) # 输出False,说明返回的是新对象
如果改成直接返回self,上面的代码会输出True,返回原对象的引用,这会破坏方法返回值的一致性语义——调用者预期得到的是"处理后的结果",而非原对象本身。
内容的提问来源于stack exchange,提问作者Philip Massey
相关产品推荐
相关产品推荐

