Steven D'Aprano wrote: > def replace_word(source, newword): > """Replace the first word of source with newword.""" > return newword + " " + "".join(source.split(None, 1)[1:]) > > import time > def test(): > t = time.time() > for i in range(10000): > s = replace_word("aa to become", "/aa/") > print ((time.time() - t)/10000), "s" > > py> test() > 3.6199092865e-06 s > > > Is that fast enough for you?
I agree in most cases it's premature optimization. But little tests like this do help in learning to write good performing code in general. Don't forget a string can be sliced. In this case testing before you leap is a win. ;-) import time def test(func, n): t = time.time() s = '' for i in range(n): s = func("aa to become", "/aa/") tfunc = t-time.time() print func.__name__,':', (tfunc/n), "s" print s def replace_word1(source, newword): """Replace the first word of source with newword.""" return newword + " " + "".join(source.split(None, 1)[1:]) def replace_word2(source, newword): """Replace the first word of source with newword.""" if ' ' in source: return newword + source[source.index(' '):] return newword test(replace_word1, 10000) test(replace_word2, 10000) ======= replace_word1 : -3.09998989105e-006 s /aa/ to become replace_word2 : -1.60000324249e-006 s /aa/ to become -- http://mail.python.org/mailman/listinfo/python-list