<br><br><div class="gmail_quote">On Sun, Mar 14, 2010 at 5:06 AM, nicky van foreest <span dir="ltr">&lt;<a href="mailto:vanforeest@gmail.com">vanforeest@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
When calling a function for the first time I like to cache some<br>
complicated computations (that only have to be done once), and then<br>
use this cached stuff in all subsequent calls to the functions. I came<br>
across the following trick on the net:<br>
<br>
def dummy(x, firstTime = [1]):<br>
    if firstTime[0] == 1:<br>
        A = 3  # typically some lengthy do-once computation to obtain a matrix A<br>
        dummy.A = A # store it<br>
        firstTime[0] = 0 # ensure this piece of code will not be run again<br>
    u = dummy.A*x  # use the cached value of A in the real computations<br>
    return u<br>
<br></blockquote><div>The above is not too complicated, but what&#39;s ugly is the firstTime keyword in the signature. This looks better to me:<br>def dummy(x):<br>   if not hasattr(dummy, &#39;_firsttime&#39;):<br>       A = 3  # typically some lengthy do-once computation to obtain a matrix A<br>
       dummy.A = A # store it<br>   u = dummy.A*x  # use the cached value of A in the real computations<br>   dummy._firsttime = False<br>   return u<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Are there other (less tricky) ways to achieve the same effect, without<br>
using a class? (As far as I can see, using classes would involve some<br>
extra lines of code, for instance, I have to instantiate it.)<br></blockquote><div><br>As long as the code is readable, why not use a few more lines? If your calculation of A only has to run once, it doesn&#39;t really belong inside the function. Either use a class, or (even easier) a private object outside the function to store the result of the computation. <br>
<br>Cheers,<br>Ralf<br><br>
</div></div><br>