Questions about remembering and caching function arguments

Aurélien Campéas spamless.aurelien.campeas at free.fr
Mon Nov 12 15:36:21 EST 2007


thebjorn a écrit :
> On Nov 12, 1:05 am, "Anand Patil" <anand.prabhakar.pa... at gmail.com>
> wrote:
>> Hi all,
>>
>> I have two questions about a class, which we'll call MyWrapperClass,
>> in a package to which I'm contributing.
>>
>> 1) MyWrapperClass wraps functions. Each instance has an attribute
>> called 'value' and a method called 'eval', which calls the wrapped
>> function. An instance D that depends on instances A, B and C can be
>> created as follows:
>>
>> @mywrapperclass
>> def D(A, B, C):
>>     return foo(A.value, B.value, C.value)
>>
>> Now that D exists, the call D.eval() will work without any arguments
>> (D remembers that the arguments are A, B and C and passes their values
>> to foo). What is the standard terminology for such classes, and does
>> anyone know of a package that implements them in a nice way? (It's
>> easy enough to roll our own, but reading about other implementations
>> might give us good ideas).
>>
>> 2) D.eval() will frequently be called multiple times in succession
>> before A.value, B.value or C.value has had the chance to change. It
>> would be _extremely_ helpful to have D detect this situation and skip
>> recomputation. I'm looking for the fastest safe way to do this.
>> There's no restriction on what kind of object A.value, etc. are, so
>> unfortunately they might be mutable.
>>
>> Our current solution is to have D compare A.value, B.value and C.value
>> to an internal cache using the 'is' operator (and put a big warning in
>> the docs about not changing 'value' attributes in-place). Not exactly
>> safe, but the speed savings over comparison with '==' will be
>> significant. Is this OK, bad or an abomination?
>>
>> Again it would be helpful to know the terminology associated with the
>> behavior I'm looking for and any packages that implement it nicely.
>>
>> Many thanks in advance and apologies for the long post,
>> Anand
> 
> Cells (A dataflow extension to CLOS) seems like what you want:
> 
>   http://common-lisp.net/project/cells/
> 
> I think there was talk of a Python version a while back...
> 
> -- bjorn
> 

pycells : http://pycells.pdxcb.net/

but also trellis : http://peak.telecommunity.com/DevCenter/Trellis




More information about the Python-list mailing list