New submission from Guido van Rossum: I'm trying to speed up a web template engine and I find that the code needs to do a lot of string replacements of this form:
name = name.replace('_', '-') Characteristics of the data: the names are relatively short (1-10 characters usually), and the majority don't contain a '_' at all. For this combination I've found that the following idiom is significantly faster: if '_' in name: name = name.replace('_', '-') I'd hate for that idiom to become popular. I looked at the code (in the default branch) briefly, but it is already optimized for this case. So I am at a bit of a loss to explain the speed difference... Some timeit experiments: bash-3.2$ ./python.exe -m timeit -s "a = 'hundred'" "'x' in a" ./python.exe -m timeit -s "a = 'hundred'" "'x' in a" bash-3.2$ ./python.exe -m timeit -s "a = 'hundred'" "a.replace('x', 'y')" ./python.exe -m timeit -s "a = 'hundred'" "a.replace('x', 'y')" bash-3.2$ ./python.exe -m timeit -s "a = 'hundred'" "if 'x' in a: a.replace('x', 'y')" ./python.exe -m timeit -s "a = 'hundred'" "if 'x' in a: a.replace('x', 'y')" bash-3.2$ ./python.exe -m timeit -s "a = 'hunxred'" "a.replace('x', 'y')" ./python.exe -m timeit -s "a = 'hunxred'" "a.replace('x', 'y')" bash-3.2$ ./python.exe -m timeit -s "a = 'hunxred'" "if 'x' in a: a.replace('x', 'y')" ./python.exe -m timeit -s "a = 'hunxred'" "if 'x' in a: a.replace('x', 'y')" ---------- components: Interpreter Core messages: 181741 nosy: gvanrossum priority: normal severity: normal status: open title: string replace is too slow type: performance versions: Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue17170> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com