[Python-ideas] A partial (wacky?) alternative to assignment expressions
Dan Sommers
dan at tombstonezero.net
Mon May 14 23:59:04 EDT 2018
On Tue, 15 May 2018 10:35:58 +1000, Steven D'Aprano wrote:
> We would need to flag which expression can be cached because it is
> PURE, and tag how far the CACHE operates over:
>
> <BEGIN CACHE>
> <PURE>
> func(arg)
> <END PURE>
> + func(arg)*2 + func(arg)**2
> <END CACHE>
>
> This would tell the compiler to only evaluate the sub-expression
> "func(arg)" once, cache the result, and re-use it each other time it
> sees that same sub-expression within the surrounding expression.
Does anyone else remember an ancient Python recipe that looked something
like what follows?
SENTINEL = object()
class Magic:
def __call__(self, arg=SENTINEL):
if arg != SENTINEL:
self.value = arg
return self.value
magic = Magic()
And then you'd use it something like this:
if magic(g(x)) != 4:
print("probably not 4: ", magic())
else:
print("should be 4: ", magic())
magic(f(x)) + magic()*2 + magic()**2
consume_the_value_again(magic())
It's not perfect, but it's not too much worse than some of the other
suggestions floating around. Sort of.
Dan
More information about the Python-ideas
mailing list