0

我有一个正在创建的项目(在 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] 就可以了,但我想知道是否有办法制作键的哈希函数。(如果这有意义的话)无需进入一个类并覆盖散列函数然后将其传入。

也许某种形式的数据结构可以存储正则表达式键并在任何有效输入上执行它?- 虽然我可以创建一个,但我想知道是否缺少某种形式的内置功能(只是为了不重新发明轮子)

希望这是有道理的!谢谢您的帮助!

4

2 回答 2

0

There is absolutely no reason to avoid implementing a tiny class with __hash__ and __eq__. Dictionaries do support custom hash functions, and that is the way to do it:

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
于 2013-07-14T08:06:00.440 回答
0

大概您实际上正在使用示例中的位值,那么为什么不从字典中派生一个字典,该字典具有一个新方法 getmasked ,该方法在查找值之前将其屏蔽...

于 2013-07-14T07:05:48.470 回答