def myFnc(input1,param0 = 0, param1 =1):
return "input1:%s [params %s, %s]" %(input1, param0, param1)以下是预期结果:
>>>> myFnc(0.1, param0= 0.1, param1 = 1)
'input1:0.1 [params 0.1, 1]'
>>>> myFnc(0.1, param0= 0.12, param1 = 1)
'input1:0.1 [params 0.12, 1]'
>>>> myFnc(0.12, param0= 0.1, param1 = 1)
'input1:0.1 [params 0.1, 1]' #the same as the first instruction我尝试使用tol和ignore,但是我没有得到我期望的结果:
>>>> from klepto import inf_cache
>>>> f=inf_cache(tol=0,ignore=("**"))(myFnc);
>>>> f(0.1, param0= 0.1, param1 = 1)
'input1:0.1 [params 0.1, 1]'
>>>> f(0.1, param0= 0.12, param1 = 1)
'input1:0.1 [params 0.1, 1]' #I wanted [params 0.12, 1]
>>>> f(0.12, param0= 0.1, param1 = 1)
'input1:0.1 [params 0.1, 1]'我是否应该更改快捷键映射?
发布于 2015-12-15 12:08:06
我是klepto的作者。对我来说,这些看起来像是预期的结果。您的f=inf_cache(tol=0,ignore="**")(myFnc)行告诉我,您希望以整数公差进行舍入,并且希望忽略函数中所有额外的**kwds。
但是,您的函数myFcn没有使用**kwds,所以我假设您的意思是您想要ignore=('param0','param1')。当您使用ignore时,它用于“忽略”函数声明…中的变量而不是函数调用。
当您忽略一个变量时,忽略该变量的是缓存。
>>> f = inf_cache(tol=0, ignore=('param0','param1'))(myFnc)
>>> f(.1, param0=.1, param1=1)
(0.1, 0.1, 1)
>>> f(.1, param0=.12, param1=1)
(0.1, 0.1, 1)
>>> f(.12, param0=.1, param1=1)
(0.1, 0.1, 1)在上面,只要'input1(the first argument) is being cached… and it doesn't change with greater thantol=0. So, when you changeparam0orparam1`…它不会使缓存无效,你仍然会得到已经缓存的值。
因此,无论您对input1之外的任何内容做了多少更改,您仍将获得最初的缓存值。
>>> f(.1, param0=5.1, param1=1)
(0.1, 0.1, 1)
>>> f(.1, param0=5.1, param1=10)
(0.1, 0.1, 1)但是,当我在int容差…之外更改input1时然后我们有第二个缓存的结果。
>>> f(5.1, param0=5.1, param1=10)
(5.1, 5.1, 10)即使我使用**,最后两个参数仍然被忽略,因为忽略适用于函数规范,而不是调用。
>>> f(5.1, **dict(param0=100, param1=100))
(5.1, 5.1, 10)更改keymap根本不会更改结果。更改keymap所做的就是更改缓存中用作键的内容。
>>> f.__cache__()
null_archive({5999492624188339149: (0.1, 0.1, 1), 58251017057462798: (5.1, 5.1, 10)}, cached=True)您还可以看到,它通过使用lookup而不是实际使用缓存来使用缓存值。
>>> f.lookup(5.1, 6, 10)
(5.1, 5.1, 10)
>>> f.lookup(4.1, 5.1, 10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mmckerns/lib/python2.7/site-packages/klepto-0.1.2.dev0-py2.7.egg/klepto/_cache.py", line 341, in lookup
return cache[keymap(*_args, **_kwds)]
KeyError: -2002243791131618159https://stackoverflow.com/questions/34264539
复制相似问题