On 28.02.2017 17:54, M.-A. Lemburg wrote: > On 28.02.2017 17:35, David Mertz wrote: >> Clearly there is SOME semantics that is consistent and coherent since many >> languages have either a lazy or eager declaration syntax, with different >> defaults between languages but both being built in. There are a lot of >> ways that Python isn't Haskell, obviously. But both Scheme and OCaml are >> eager by default with a lazy declaration (and Haskell or Miranda have an >> eager declaration correspondingly). >> >> It might be worth looking at their semantics in the PEP. > > Scheme, for example, uses an explicit approach to turning > a promise into a value: > > http://www.shido.info/lisp/scheme_lazy_e.html > > This makes a lot of sense, but you can already have the > same in Python using generators.
Here's an example similar to OCaml's lazy evaluation, which uses a simple lazy proxy object. import sys import time ### OCaml like lazy evaluation class Lazy: def __init__(self, code, frame): self.code = code self.globals = frame.f_globals self.locals = frame.f_locals def force(self): return eval(self.code, self.globals, self.locals) def lazy(code): return Lazy(code, sys._getframe(1)) ### def log(level, b, c): if level > 100: return if isinstance(c, Lazy): c = c.force() print ('%04i: %s' % (level, b % c)) def expensive(x): time.sleep(2.0) return x value = 1 log(1000, 'Hello %i', lazy("expensive(value)")) log(10, 'Error %i', lazy("expensive(value)")) ### Everything is nice and explicitly defined in the example. You can see where the deferred evaluation is requested and where it's eventually run. There are no surprises. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Experts (#1, Feb 28 2017) >>> Python Projects, Coaching and Consulting ... http://www.egenix.com/ >>> Python Database Interfaces ... http://products.egenix.com/ >>> Plone/Zope Database Interfaces ... http://zope.egenix.com/ ________________________________________________________________________ ::: We implement business ideas - efficiently in both time and costs ::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 http://www.egenix.com/company/contact/ http://www.malemburg.com/ _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/