better way for ' '.join(args) + '\n'?
Hubert Grünheidt
hgruenheidt at t-online.de
Fri Oct 26 12:21:19 EDT 2012
Hi Ulrich,
is this acceptable?
args = ['foo', 'bar', 'baz']
args.append('\n')
line = ' '.join(args)
Cheers,
Hubert
On 10/26/2012 09:49 AM, Ulrich Eckhardt wrote:
> Hi!
>
> General advise when assembling strings is to not concatenate them
> repeatedly but instead use string's join() function, because it avoids
> repeated reallocations and is at least as expressive as any alternative.
>
> What I have now is a case where I'm assembling lines of text for driving
> a program with a commandline interface. In this scenario, I'm currently
> doing this:
>
> args = ['foo', 'bar', 'baz']
> line = ' '.join(args) + '\n'
>
> So, in other words, I'm avoiding all the unnecessary copying, just to
> make another copy to append the final newline.
>
> The only way around this that I found involves creating an intermediate
> sequence like ['foo', ' ', 'bar', ' ', 'baz', '\n']. This can be done
> rather cleanly with a generator:
>
> def helper(s):
> for i in s[:-1]:
> yield i
> yield ' '
> yield s[-1]
> yield '\n'
> line = ''.join(tmp(args))
>
> Efficiency-wise, this is satisfactory. However, readability counts and
> that is where this version fails and that is the reason why I'm writing
> this message. So, dear fellow Pythonistas, any ideas to improve the
> original versions efficiency while preserving its expressiveness?
>
> Oh, for all those that are tempted to tell me that this is not my
> bottleneck unless it's called in a very tight loop, you're right.
> Indeed, the overhead of the communication channel TCP between the two
> programs is by far dwarving the few microseconds I could save here. I'm
> still interested in learning new and better solutions though.
>
>
> Cheers!
>
> Uli
>
More information about the Python-list
mailing list