我正在创建一个项目(在python 3.3中),我正在努力弄清楚是否有一种有效(或更漂亮的方法)来完成以下操作。
我有一个提取二进制/十六进制字符串的函数,如下所示(成组的位仅用于示例目的)
- 0000 1111 0002 0001
- 0000 1111 0003 0001
- 0000 1111 0002 0002
- 0000 1110 0002 0001
现在,我想做的是能够将这些传递到一个函数中,然后根据第二组比特和第四组比特(即操作码)中的值将它们激发到一个方法中例如;散列函数,该散列函数将检查(*1111*0001)是否匹配,然后返回与这些比特相关的函数。
我有过使用哈希表词典的想法,但我不完全确定如何将键作为掩码。
虽然我可以用键11110001和我想要返回的函数值制作一个字典,然后只需插入并传递[4:8][12:16]就可以了,但我想知道是否有办法为键制作哈希函数。(如果这有意义的话),而不需要进入一个类并重写哈希函数,然后将其传入。
也许是某种形式的数据结构,存储regex键并在任何有效输入上执行它?-虽然我可以创建一个,但我想知道我是否缺少某种形式的内置功能(只是为了不重新发明轮子)
希望这是有道理的!谢谢你的帮助!
绝对没有理由避免用__hash__
和__eq__
实现一个小类。字典确实支持自定义散列函数,这就是实现它的方法:
KEY_MASK = 0xf0f0 # or whichever mask you need
class Key(object):
__slots__ = 'num',
def __init__(self, num):
self.num = num
def __hash__(self):
return hash(self.num & KEY_MASK)
def __eq__(self, other):
return self.num & KEY_MASK == other.num & KEY_MASK
def __ne__(self, other):
return not self == other
假设您实际上使用的是示例中的位值,那么为什么不从字典中派生一个字典呢?该字典有一个新方法getmask,它在查找之前屏蔽值。。。