can it be shorter?

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Jun 6 18:34:38 CEST 2009


On Sat, 06 Jun 2009 15:59:37 +0000, kj wrote:

> In <h0e0oi$1es2$1 at adenine.netfront.net> "tsangpo"
> <tsangpo.newsgroup at gmail.com> writes:
> 
>>I want to ensure that the url ends with a '/', now I have to do thisa
>>like below.
>>url = url + '' if url[-1] == '/' else '/'
> 
>>Is there a better way?
> 
> It's a pity that in python regexes are an "extra", as it were. Otherwise
> I'd propose:
> 
> url = re.sub("/?$", "/", url)


Thank goodness regexs are an "extra" in Python, because it discourages 
noobs from pulling out the 80 pound sledgehammer of the regex engine to 
crack the peanut of a test-and-concatenate:


>>> from timeit import Timer
>>> min(Timer(
... "if not s.endswith('/'): s += '/'", "s = 'abcd/efgh'").repeat())
0.70030903816223145
>>> min(Timer(
... "sub('/?$', '/', s)", "from re import sub; s = 'abcd/efgh'").repeat())
7.6922709941864014


That's more than ten times slower. Really, a regex is massive overkill 
for a task that simple.



-- 
Steven



More information about the Python-list mailing list