This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author amaury.forgeotdarc
Recipients albert.neu, amaury.forgeotdarc
Date 2011-01-18.12:14:12
SpamBayes Score 0.001344807
Marked as misclassified No
Message-id <1295352859.47.0.183030916297.issue10930@psf.upfronthosting.co.za>
In-reply-to
Content
setdefault() is a method, its arguments are evaluated then the function is called. This is not a bug, and this behavior cannot change.

If you are trying to "cache" the computation of a function, you should try "memoizing" techniques, like the one mentioned here: http://code.activestate.com/recipes/52201-memoizing-cacheing-function-return-values/
Then you can write::

    @Memoize
    def fib(n):
        return fib(n-1) + fib(n-2)
    fib.memo = {(0,): 1, (1,): 1}

    @Memoize
    def func(n):
        return 1/float(n)
    func.memo = {(0.0,): infinite}
History
Date User Action Args
2011-01-18 12:14:19amaury.forgeotdarcsetrecipients: + amaury.forgeotdarc, albert.neu
2011-01-18 12:14:19amaury.forgeotdarcsetmessageid: <1295352859.47.0.183030916297.issue10930@psf.upfronthosting.co.za>
2011-01-18 12:14:12amaury.forgeotdarclinkissue10930 messages
2011-01-18 12:14:12amaury.forgeotdarccreate