跨不同会话散列python函数

2024-03-29 00:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据函数的参数生成一个散列(用于一些快速的自动缓存)。散列应该在不同会话之间保持一致。你知道吗

假设我有以下函数:

def generate_hash(dictionary):
  return hashlib.sha224(str(dictionary.items())).hexdigest()

def foo(a,b,c):
 return generate_hash(locals())

只要参数str表示在会话之间是一致的,这是非常好的。问题是,我经常将函数作为参数传递,但看起来它们不是。你知道吗

例如,下面的调用将跨会话返回不同的结果。你知道吗

foo(1,2,np.sum)

有解决办法吗?你知道吗


Tags: 函数参数dictionaryreturnfoodefitemshash
1条回答
网友
1楼 · 发布于 2024-03-29 00:15:29

好像我自己想出来了:

 16 def generate_hash(dictionary):
 17   args = []
 18   for key,item in dictionary.iteritems():
 19     if isinstance(item,functools.partial):
 20       args.append((key,item.func.__module__,item.func.__name__,                                                  
 21         generate_hash(item.keywords)))
 22     elif inspect.isfunction(item):
 23       args.append((key,item.__module__,item.__name__))
 24     else:
 25       args.append((key,item))
 26   return hashlib.sha224(str(args)).hexdigest()

与部分功能一致:

foo('a','1',np.average)                         -> 1631c5fd0050fd01cb7a7ee9666d366b35c1415cb4181c7220ead043
foo('a',1,functools.partial(np.average,axis=0)) -> 692227d3b52b0cdcd4ed2204650cb207c1ab6f274a09977c711d35d5                                                            
foo('a',1,functools.partial(np.average,axis=1)) -> ba1e0b01f2e12ef1c9ca2e3bf5235aaadcbe4ab29d9c977e1ee6e799

相关问题 更多 >