On Thu, Apr 17, 2008 at 01:36:54PM +1200, Greg Ewing wrote: > Oleg Broytmann wrote: > > Do I understand it right that str(objects) calls repr() on items to > > properly quote strings? (str([1, '1']) must give "[1, '1']" as the result). > > Is it the only reason? > > In the case of strings, yes. More generally, there > can be any kind of object in the list, and repr(x) > is more likely to give an unambiguous idea of what > x is than str(x) when it's embedded in a comma- > separated list.
When I use str(container) instead of repr(comtainer) does Python need to guess if I want an unambiguous representation or a printable representation of items? I don't think there is a room for guessing - I explicitly said str(). > Python has no way of guessing the most appropriate > way to display your list of objects when you use > str(), so it doesn't try. It doesn't need to guess - all objects *except strings* have __str__, so it should just call it. > You have to tell it by > writing code to do what you want. Well, I found the root of the problem. Python's builtin containers (list, tuple, dict, set) implement __repr__ but not __str__ and of course __repr__ calls repr() on items (which is the correct behaviour). The current implementation goes like this: class object: def __str__(self): # In case the derived class doesn't implement it return repr(self) class list(object): def __repr__(self) pieces = [] for item in self: pieces.append(repr(item)) return '[%s]' % (', '.join(pieces)) I'd like to see __str__ implemented the following way: def __str__(self) pieces = [] for item in self: if isinstance(item, str): pieces.append("'%s'" % item) else: pieces.append(str(item)) return '[%s]' % (', '.join(pieces)) Oleg. -- Oleg Broytmann http://phd.pp.ru/ [EMAIL PROTECTED] Programmers don't die, they just GOSUB without RETURN. _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com