On Tue, 29 Mar 2005 11:32:33 -0800, Michael Spencer <[EMAIL PROTECTED]> wrote: [...] >While we're on the topic, what do you think of having unary, non-summary >builtins automatically map themselves when called with an iterable that would >otherwise be an illegal argument: That last "otherwise" is pretty important for strings as in int('1234') ;-) > >e.g., >int(iterable) -> (int(i) for i in iterable) >ord(iterable) -> (ord(i) for i in iterable) > > >This would be unambiguous, I think, in the cases of bool, int, callable, chr, >float, hex, id, long, oct, ord, vars...
> >It would shorten the common cases of: >for char in somestring: > ordchar = ord(char) > # do something with ordchar, but not char But wouldn't you really currently write the "->" form from above? I.e., for ordchar in (ord(c) for c in somestring): ... to compare with >to >for ordchar in ord(somestring): > ... > So it's not _that_ much shorter ;-) >It would not work for summarizing functions or those that can accept an >iterable >today e.g., len, repr > I like concise expression, so I'm willing to try it. I guess it would be enough to override __builtins__ to get a taste, e.g., (not thought through): >>> class itint(int): ... oldint = __builtins__.int ... def __new__(cls, arg): ... try: return cls.oldint(arg) ... except (TypeError, ValueError): ... oi = cls.oldint ... return (oi(item) for item in arg) ... >>> __builtins__.int = itint >>> int('1234') 1234 >>> for x in int('1 23 456'.split()): print x, ... 1 23 456 >>> for x in int(range(1,8,2)): print x, ... 1 3 5 7 >>> for x in int('123x'): print x, ... 1 2 3 Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 7, in <generator expression> ValueError: invalid literal for int(): x Hm, ... ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list