Nick Coghlan wrote:

def lazy(x, *args, **kwds): """Executes x(*args, **kwds) when called""" if args or kwds: return lambda : x(*args, **kwds) else: return x # No arguments, so x must be callable by itself

[snip]

Huh. I think I like the idea of lazy() much better than I like the current PEP 312.

Well, 'lazy' is definitely much easier to read, reference in the documentation, etc. than ':' would be.


There must be something wrong with this idea that I'm missing. . .

Well, it does cost you some conciceness, as your examples show[1]:

lazy(mul, x, y)                     v.s.   :x * y
lazy(itemgetter(i), x)              v.s.   :x[i]
lazy(attrgetter("a"), x)            v.s.   :x.a
lazycall(lazy(attrgetter("a"), x))  v.s.   :x.a()

Not sure how I feel about this yet. I don't personally need lazy argument evaluation often enough to be able to decide which syntax would really be clearer...

Steve

[1] To try to make things as fair as possible, I'm assuming that you've done
    from operator import mul, itemgetter, attrgetter
at the top of the module.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to