En Wed, 27 Feb 2008 23:18:14 -0200, Steven D'Aprano <[EMAIL PROTECTED]> escribió:
> I think there is a good case for % taking an iterator. Here's an > artificial example: > > def spam(): > while True: yield "spam" > > spam = spam() > > "%s eggs tomato and %s" % spam > "%s %s bacon tomato %s and eggs" % spam > "%s %s %s %s %s %s %s %s truffles and %s" % spam > > The iterator could be arbitrarily complex, but the important feature is > that the % operator lazily demands values from it, taking only as few as > it needs. If the iterator is exhausted early, it is an error. The % operator has to know whether you want to convert the iterator itself, or the items yielded. Currently it checks whether its argument is a tuple, and takes its contents. "%s" % "hello" is a (very handy) shortcut for "%s" % ("hello",). Consider the following: py> L = ["hello", "world"] py> print "%s" % L ['hello', 'world'] Your suggestion would make it behave like this: py> print "%s" % L 'hello' Then, if one wants to display the container itself and not the contained items, one should wrap *every* list and every sequence/iterator/iterable object into an one-element tuple. Currently this is only required for tuples. Changing the % operator this way isn't a good idea, but your suggestion could be used in another string method/operator/library function. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list