首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >klepto缓存中参数的不同容差

klepto缓存中参数的不同容差
EN

Stack Overflow用户
提问于 2015-12-14 18:20:09
回答 1查看 85关注 0票数 1
代码语言:javascript
复制
def myFnc(input1,param0 = 0, param1 =1):
    return "input1:%s [params %s, %s]" %(input1, param0, param1)

以下是预期结果:

代码语言:javascript
复制
>>>> 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,但是我没有得到我期望的结果:

代码语言:javascript
复制
>>>> 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]'

我是否应该更改快捷键映射?

EN

回答 1

Stack Overflow用户

发布于 2015-12-15 12:08:06

我是klepto的作者。对我来说,这些看起来像是预期的结果。您的f=inf_cache(tol=0,ignore="**")(myFnc)行告诉我,您希望以整数公差进行舍入,并且希望忽略函数中所有额外的**kwds

但是,您的函数myFcn没有使用**kwds,所以我假设您的意思是您想要ignore=('param0','param1')。当您使用ignore时,它用于“忽略”函数声明…中的变量而不是函数调用。

当您忽略一个变量时,忽略该变量的是缓存

代码语言:javascript
复制
>>> 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之外的任何内容做了多少更改,您仍将获得最初的缓存值。

代码语言:javascript
复制
>>> 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时然后我们有第二个缓存的结果。

代码语言:javascript
复制
>>> f(5.1, param0=5.1, param1=10)
(5.1, 5.1, 10)

即使我使用**,最后两个参数仍然被忽略,因为忽略适用于函数规范,而不是调用。

代码语言:javascript
复制
>>> f(5.1, **dict(param0=100, param1=100))
(5.1, 5.1, 10)

更改keymap根本不会更改结果。更改keymap所做的就是更改缓存中用作键的内容。

代码语言:javascript
复制
>>> f.__cache__()
null_archive({5999492624188339149: (0.1, 0.1, 1), 58251017057462798: (5.1, 5.1, 10)}, cached=True)

您还可以看到,它通过使用lookup而不是实际使用缓存来使用缓存值。

代码语言:javascript
复制
>>> 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: -2002243791131618159
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34264539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档