En Tue, 22 Dec 2009 03:13:38 -0300, Zubin Mithra <zubin.mit...@gmail.com>
escribió:
I have the following two implementation techniques in mind.
def myfunc(mystring):
check = "hello, there " + mystring + "!!!"
print check
OR
structure = ["hello, there",,"!!!"]
def myfunc(mystring):
structure[2] = mystring
output = ''.join(mystring)
i heard that string concatenation is very slow in python; so should i
go for the second approach? could someone tell me why? Would there be
another 'best-practice-style'?
THIS is slow for large enough values of len(items):
def concat(items):
result = ''
for item in items:
result += item
return result
because at each stage it has to create a new string, bigger than the
previous one; it's an n**2 process.
Concatenating just three strings as in your example is fast. The time
spent in dereferencing the "structure" name, indexing into it, creating
the join bound method, iterating, etc. is way longer than the inefficiency
of using + in this case. Anyway, don't blindly trust me, measure it:
python -m timeit -s "def one(x): return 'hello, there '+x+'!!!'"
"one('gabriel')"
100000 loops, best of 3: 7.9 usec per loop
python -m timeit -s "lst=['hello, there ','','!!!']" -s "def two(x):
lst[1]=x; return ''.joi
n(lst)" "two('gabriel')"
100000 loops, best of 3: 12.4 usec per loop
python -m timeit -s "def three(x): return ''.join(('hello, there
',x,'!!!'))" "three('gabr
iel')"
100000 loops, best of 3: 11.9 usec per loop
Anyway, usually, showing a message isn't critical and one doesn't care how
fast it goes, so I'd use this version which is a lot more readable (and
easier to localize, BTW):
def myfunc(mystring):
check = "hello, there {0}!!!".format(mystring)
print check
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list