Mike Meyer wrote: > Personally, I'd love a language feature that let you create a function > that didn't evaluate arguments until they were actually used - lazy > evaluation. That lets you write the C ?: operator as a function, for > a start. > > Hmmm. No, iterators can't be used to fake it. Oh well.
if you can get some collaboration from the function itself, you can fake anything: def foo_default(): while 1: print "MAKE A FOO" yield "foo" foo_default = foo_default() class mydict(dict): def setdefault(self, key, default=None): try: return self[key] except KeyError: if hasattr(default, "next"): default = default.next() self[key] = default return default d = mydict() d["spam"] = "bacon" print d.setdefault("spam", foo_default) print d.setdefault("egg", foo_default) </F> -- http://mail.python.org/mailman/listinfo/python-list