[Python-Dev] Re: "groupby" iterator
Michael Hudson
mwh at python.net
Wed Dec 3 05:52:38 EST 2003
Guido van Rossum <guido at python.org> writes:
>> > It would let you do things like
>> >
>> >>>> map(X + 1, range(2))
>>
>> Something like this?
>>
>> class Adder:
>> def __init__(self, number):
>> self._number = number
>> def __call__(self, arg):
>> return arg + self._number
>>
>> class X:
>> def __add__(self, number):
>> return Adder(number)
>>
>> X = X()
>>
>> print map(X + 1, range(2))
>
> Ah, of course. Nice. This can be extended to __getattr__ and
> __getitem__; unfortunately __call__ would be ambiguous.
Yes. I think I used .c() for that. IIRC correctly, I also
complicated things to the extent that there was a special object, say
N, and you could write
>>> map(X.split(N), ['a a', 'b b\nb'], [None, '\n'])
[['a', 'a'], ['b b', 'b']]
This might be going a bit far...
> It could probably be made quite fast with a C implementation.
Would be tedious to write though :-)
> Now the question remains, would it be better to hide this and simply
> use it under the hood as an alternative way of generating code for
> lambda, or should it be some sort of standard library module, to be
> invoked explicitly? In favor of the latter pleads that this would
> solve the semantic differences with lambda when free variables are
> involved: obviously X+q would evaluate q only once, while
> (lamda X: X+q) evaluates q on each invocation. Remember that for
> generator expressions we've made the decision that
> (X+q for X in seq)
> should evaluate q only once.
I am not a fan of the idea of compiling certain kinds of lambdas
differently.
Cheers,
mwh
--
While preceding your entrance with a grenade is a good tactic in
Quake, it can lead to problems if attempted at work. -- C Hacking
-- http://home.xnet.com/~raven/Sysadmin/ASR.Quotes.html
More information about the Python-Dev
mailing list