On Thu, 30 May 2013 20:38:40 +0100, MRAB wrote: > On 30/05/2013 19:44, Chris Angelico wrote: >> On Fri, May 31, 2013 at 4:36 AM, Ian Kelly <ian.g.ke...@gmail.com> >> wrote: >>> On Wed, May 29, 2013 at 8:49 PM, rusi <rustompm...@gmail.com> wrote: >>>> On May 30, 6:14 am, Ma Xiaojun <damage3...@gmail.com> wrote: >>>>> What interest me is a one liner: >>>>> print '\n'.join(['\t'.join(['%d*%d=%d' % (j,i,i*j) for i in >>>>> range(1,10)]) for j in range(1,10)]) >>>> >>>> Ha,Ha! The join method is one of the (for me) ugly features of >>>> python. >>>> You can sweep it under the carpet with a one-line join function and >>>> then write clean and pretty code: >>>> >>>> #joinwith def joinw(l,sep): return sep.join(l) >>> >>> I don't object to changing the join method (one of the more >>> shoe-horned string methods) back into a function, but to my eyes >>> you've got the arguments backward. It should be: >>> >>> def join(sep, iterable): return sep.join(iterable) >> >> Trouble is, it makes some sense either way. I often put the larger >> argument first - for instance, I would write 123412341324*5 rather than >> the other way around - and in this instance, it hardly seems as >> clear-cut as you imply. But the function can't be written to take them >> in either order, because strings are iterable too. (And functions that >> take args either way around aren't better than those that make a >> decision.) >> > And additional argument (pun not intended) for putting sep second is > that you can give it a default value: > > def join(iterable, sep=""): return sep.join(iterable)
I think that is the winning argument. Next question is what should be the default ("", " " or',')? -- Nasrudin walked into a teahouse and declaimed, "The moon is more useful than the sun." "Why?", he was asked. "Because at night we need the light more." -- http://mail.python.org/mailman/listinfo/python-list