Python replace()的功能

Python replace()的功能,python,function,replace,Python,Function,Replace,我真的无法理解这句话,请解释一下。根据doc(帮助(str.replace)): 基本上,您正在设置要替换的发生次数限制 关于第一个示例的关注点: 似乎print(“abc.replace”(“,“|”)属于python开发人员的特殊情况句柄。在这里检查代码 从python切换到c,可以看到当要替换的字符串长度为0时,调用函数stringlib\u replace\u interleave。 这个例子说它将: replace(self, old, new, count=-1, /) Return

我真的无法理解这句话,请解释一下。

根据doc(
帮助(str.replace)
):

基本上,您正在设置要替换的发生次数限制

关于第一个示例的关注点:

似乎
print(“abc.replace”(“,“|”)
属于python开发人员的特殊情况句柄。在这里检查代码

从python切换到c,可以看到当要替换的字符串长度为0时,调用函数
stringlib\u replace\u interleave
。 这个例子说它将:

replace(self, old, new, count=-1, /)
Return a copy with all occurrences of substring old replaced by new.
    count
     Maximum number of occurrences to replace.
     -1 (the default value) means replace all occurrences.
    
    If the optional argument count is given, only the first count occurrences are
    replaced.

对于所有其他情况,您都可以检查。

在第一行中,您试图用
|
替换每个
字符,因此输出应该是
a | b | c
。如果您的代码类似于
abc
,那么您的输出将是
|a | b | c |

关于最后一行和您的预期输出(应该是
abcabc
),
replace
函数替换,而不是相乘。所以你可以修改你的代码,首先替换你想要的字符,然后将它们乘以3,得到你想要的

/* insert the 'to' bytes everywhere.    */
/*    >>> b"Python".replace(b"", b".")  */
/*    b'.P.y.t.h.o.n.'                  */
现在输出为
abcabc

但是关于你的代码,你告诉Python解释器,嘿,找到三个',用'abc'替换它们,但是你的代码只包含一个
,你不能用
abc
替换其中的三个,并得到空值

事实上,这不是一个bug

编辑

我搜索了更多,发现了一个类似于您在Python版本3.8中的Python bug的bug。我用Python 3.9 IDLE再次检查了它,现在它工作正常:

print("".replace("", "abc")*3)

你为什么过了3级?你对印刷品有什么期待(“.”替换(“,”abc“,3))我只需要解释一下兄弟。。。无法理解第一行和最后一行可能值得阅读源代码以了解此行为。搜索“没有办法超越这一点”。的文档中没有明确说明行为是什么(非常典型的Python imo)。@RatnapalShende因此,您的推断似乎是正确的,这是一个bug(或至少是未定义的行为),并且已在Python 3.9中进行了说明。我认为你应该接受赛义德的回答。请不要在你的问题中添加评论。我们需要的问题是长期有用的,您添加的文本对几年后有类似问题的来访者没有用处,他们试图看看答案是否也会对他们有帮助。使用注释,但要考虑到这一点。我已经删除了评论并锁定了帖子一段时间,以确保您理解不要再添加这些评论。请解释第一行bro
print(“abc”)。replace(“,“|”)
您能详细说明为什么您认为这个答案可以解释这些症状吗?默认值-1表示替换所有引用,这会导致替换空字符串(一次)。那么为什么1(或2或3)不会导致空字符串被替换一次呢?在-1的情况下,出现的次数似乎是一次,那么为什么传递count=1不会导致相同的输出?count参数是要替换的最大出现次数,而不是最小出现次数。是的,您是对的,但是当您有一个空字符串时,那么它实际上只在没有
count
参数的情况下工作..问题是为什么会发生这种情况。当您说“无最大引用(-1)”时,它将替换一个引用。当您说“最大一次出现(1)”时,它将替换零次出现。我用Python3.9再次尝试,Python的新版本运行正常。现在,即使您将计数设置为3,它也会返回
abc
,因为它只有一个,所以它会返回
abc
。在Python Bugs中,这似乎是一个问题编号为28029的bug,在版本3.9中已修复。我很高兴你在挑战我,所以我研究寻找答案(我知道你知道答案)
print("".replace("", "abc")*3)
print(''.replace('', 'abc', 3))
abc