Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/request.py @ 26846:7c1b4840c2cd
hgweb: replace some str.split() calls by str.partition() or str.rpartition()
Since Python 2.5 str has new methods: partition and rpartition. They are more
specialized than the usual split and rsplit, and they sometimes convey the
intent of code better and also are a bit faster (faster than split/rsplit with
maxsplit specified). Let's use them in appropriate places for a small speedup.
Example performance (partition):
$ python -m timeit 'assert "apple|orange|banana".split("|")[0] == "apple"'
1000000 loops, best of 3: 0.376 usec per loop
$ python -m timeit 'assert "apple|orange|banana".split("|", 1)[0] == "apple"'
1000000 loops, best of 3: 0.327 usec per loop
$ python -m timeit 'assert "apple|orange|banana".partition("|")[0] == "apple"'
1000000 loops, best of 3: 0.214 usec per loop
Example performance (rpartition):
$ python -m timeit 'assert "apple|orange|banana".rsplit("|")[-1] == "banana"'
1000000 loops, best of 3: 0.372 usec per loop
$ python -m timeit 'assert "apple|orange|banana".rsplit("|", 1)[-1] == "banana"'
1000000 loops, best of 3: 0.332 usec per loop
$ python -m timeit 'assert "apple|orange|banana".rpartition("|")[-1] == "banana"'
1000000 loops, best of 3: 0.219 usec per loop
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Mon, 02 Nov 2015 23:37:49 +0800 |
parents | 461e7b700fdf |
children | 37fcfe52c68c |
comparison
equal
deleted
inserted
replaced
26845:7a77ee434179 | 26846:7c1b4840c2cd |
---|---|
78 | 78 |
79 def respond(self, status, type, filename=None, body=None): | 79 def respond(self, status, type, filename=None, body=None): |
80 if self._start_response is not None: | 80 if self._start_response is not None: |
81 self.headers.append(('Content-Type', type)) | 81 self.headers.append(('Content-Type', type)) |
82 if filename: | 82 if filename: |
83 filename = (filename.split('/')[-1] | 83 filename = (filename.rpartition('/')[-1] |
84 .replace('\\', '\\\\').replace('"', '\\"')) | 84 .replace('\\', '\\\\').replace('"', '\\"')) |
85 self.headers.append(('Content-Disposition', | 85 self.headers.append(('Content-Disposition', |
86 'inline; filename="%s"' % filename)) | 86 'inline; filename="%s"' % filename)) |
87 if body is not None: | 87 if body is not None: |
88 self.headers.append(('Content-Length', str(len(body)))) | 88 self.headers.append(('Content-Length', str(len(body)))) |