You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:20:31