擅长:python、mysql、java
<p>我认为您在这里的困惑(以及大多数答案)是<code>string</code>模块和<code>str</code>内置类之间的不同。它们是完全独立的,即使功能上有很多重叠。</p>
<p><code>string.replace(s, old, new)</code>是自由函数,而不是方法。无法将其称为<code>s.replace(old, new)</code>,因为<code>s</code>不能是<code>string</code>模块的实例。</p>
<p><code>str.replace(self, old, new)</code>是一种方法。与任何其他方法(classmethod和staticmethod方法除外)一样,您可以并且通常通过<code>str</code>实例调用它,即<code>s.replace(old, new)</code>,其中<code>s</code>自动成为<code>self</code>参数。</p>
<p>也可以通过类调用方法,因此<code>str.replace(s, old, new)</code>与<code>s.replace(old, new)</code>完全相同。碰巧,如果<code>s</code>是一个<code>str</code>,那么它的作用与<code>string.replace(old, new)</code>完全相同。但出于历史原因,这确实是个巧合。</p>
<p>另外,您几乎不想调用<code>string</code>模块中的函数。它们大多是Python早期版本的遗留物。实际上,<code>string.replace</code>列在文档中的“不推荐使用的字符串函数”部分下,您可能会在那里查找的其他大多数函数也是如此。整个模块没有被弃用的原因是它有一些不属于<code>str</code>(或<code>bytes</code>或<code>unicode</code>)类的东西,比如像<code>string.digits</code>这样的常量。</p>