[MERGE] rand_chars() optimization
John Arbash Meinel
john at arbash-meinel.com
Sun Mar 11 13:15:52 GMT 2007
John Arbash Meinel has voted +1 (conditional).
Status is now: Semi-approved
Well, if we are going to optimize this one, I have a couple other hints.
First, I like the dictionary.
But appending to a string is expensive, because it has to generate a new
string each time. I'm not sure how this effects rand_chars(16) which is
our common case, but it should be a big deal for rand_chars(50).
And then, if you are using a dictionary, you should make it a local
variable before the loop.
So this is what I would do:
_map = _rand_chars_map
return ''.join([map[b] for b in rand_bytes(num)])
Using a list comprehension, and then doing using string.join should be
I tested a list comprehension versus a generator, and 'timeit' says that
the list is faster. I assume this is because the string can iterate once
to figure out how long it needs to be, and then again to merge
everything together. (13us per loop versus 10s) per loop.
So I'm happy with your version, but there are a couple more tricks we
Can you benchmark it with the alternative, to see how much it helps?
For details, see:
More information about the bazaar