Flask-cache 为 int 和 long 参数生成不同的键
Flask-cache generate different keys for int and long parameters
Flask-cache 使用函数参数生成缓存键,但是它对 long 和 int 类型参数制作不同的键:
@cache.memoize(3600)
def foo(a):
return a
foo(1)
和 foo(1L)
将生成不同的缓存键,我该怎么做才能将它们的 return 值分配给同一个缓存键?
您可以通过子类将整数转换为长整数。
例如
class CustomCache(Cache):
def _memoize_kwargs_to_args(self, f, *args, **kwargs):
keyargs, keykwargs = super(CardCache, self) \
._memoize_kwargs_to_args(f, *args, **kwargs)
new_args = []
for arg in keyargs:
if isinstance(arg, numbers.Integral):
arg = long(arg)
new_args.append(arg)
return tuple(new_args), keykwargs
Flask-cache 使用函数参数生成缓存键,但是它对 long 和 int 类型参数制作不同的键:
@cache.memoize(3600)
def foo(a):
return a
foo(1)
和 foo(1L)
将生成不同的缓存键,我该怎么做才能将它们的 return 值分配给同一个缓存键?
您可以通过子类将整数转换为长整数。
例如
class CustomCache(Cache):
def _memoize_kwargs_to_args(self, f, *args, **kwargs):
keyargs, keykwargs = super(CardCache, self) \
._memoize_kwargs_to_args(f, *args, **kwargs)
new_args = []
for arg in keyargs:
if isinstance(arg, numbers.Integral):
arg = long(arg)
new_args.append(arg)
return tuple(new_args), keykwargs