Python replace()的功能
我真的无法理解这句话,请解释一下。根据doc(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
帮助(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