On Sat, Jun 1, 2013 at 1:43 AM, Ian Kelly <ian.g.ke...@gmail.com> wrote: > On Thu, May 30, 2013 at 1:38 PM, MRAB <pyt...@mrabarnett.plus.com> wrote: >> 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) > > One argument against the default is that it is specific to the str > type. If you then tried to use join with an iterable of bytes objects > and the default sep argument, you would get a TypeError. At least not > having the default forces you to be explicit about which string type > you're joining.
What about: def join(iterable, sep=None): if sep is not None: return sep.join(iterable) iterable=iter(iterable) first = next(iterable) return first + type(first)().join(iterable) Granted, it has some odd error messages if you pass it stuff that isn't strings: >>> join([[1,2,3],[4,5,6]]) Traceback (most recent call last): File "<pyshell#241>", line 1, in <module> join([[1,2,3],[4,5,6]]) File "<pyshell#235>", line 5, in join return first + type(first)().join(iterable) AttributeError: 'list' object has no attribute 'join' but you'd get that sort of thing anyway. (NOTE: I am *not* advocating this. I just see it as a solution to one particular objection.) ChrisA -- http://mail.python.org/mailman/listinfo/python-list