python replace()函数,我是否应该首先检查我要替换的是字符串的子字符串?

python replace()函数,我是否应该首先检查我要替换的是字符串的子字符串?,python,Python,假设我想替换字符串的“/”字符,但它可能在字符串中,也可能不在字符串中,在这种情况下,最好的选择是什么 此代码: text = text.replace('/', os.linesep) if '/' in text else text 还是仅仅是这个 text = text.replace('/', os.linesep) 第一句话是否有助于避免浪费时间“试图替换”?如前所述,不需要检查。但是,如果有很多情况下有很多子字符串不存在的字符串,这可能会有所帮助。在这种情况下,您可能会获得大量的

假设我想替换字符串的“/”字符,但它可能在字符串中,也可能不在字符串中,在这种情况下,最好的选择是什么

此代码:

text = text.replace('/', os.linesep) if '/' in text else text
还是仅仅是这个

text = text.replace('/', os.linesep)

第一句话是否有助于避免浪费时间“试图替换”?

如前所述,不需要检查。但是,如果有很多情况下有很多子字符串不存在的字符串,这可能会有所帮助。在这种情况下,您可能会获得大量的性能增益。使用timeit模块检查它:

在许多情况下子字符串不在字符串中的比较。请注意,性能上存在很大差异

➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b") if "a" in "vxnxikmhdc" else "vxnxikmhdc"'
10000000 loops, best of 3: 0.0524 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b")'
1000000 loops, best of 3: 0.207 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j")'
1000000 loops, best of 3: 0.245 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j") if "x" in "vxnxikmhdc" else "vxnxikmhdc"'
1000000 loops, best of 3: 0.308 usec per loop
比较字符串中存在子字符串的位置。请注意,在性能上几乎没有差异

➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b") if "a" in "vxnxikmhdc" else "vxnxikmhdc"'
10000000 loops, best of 3: 0.0524 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("a", "b")'
1000000 loops, best of 3: 0.207 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j")'
1000000 loops, best of 3: 0.245 usec per loop
➜  ~ python3.5 -m timeit '"vxnxikmhdc".replace("x", "j") if "x" in "vxnxikmhdc" else "vxnxikmhdc"'
1000000 loops, best of 3: 0.308 usec per loop

只做替换会更快。这样想吧。如果你在文本中说
If'/',
你必须查看每个字符。如果你做了一个替换,它必须检查每个字符。因此,通过首先检查它是否存在,实际上将计算时间增加了一倍。