调用特定顺序的函数列表?

2024-06-26 09:50:07 发布

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

我宁愿这样做

class A:
    def __init__(self):
        self._TESTS = {
            'val1': self.test1,
            #...
            'val10': self.test10
        }
    def test(self, x):
        for v, f in self._TESTS.items():
            if f(x):
                return v
        return None

在这上面

class A:
    def test(self, x):
        if self.test1(x):
            return 'val1'
        #...
        if self.test10(x):
            return 'val10'
        return None

但是,我需要按特定顺序调用test*方法。你会怎么做?你知道吗

我可以使用collections.OrderedDict,但实际上我根本没有字典,因为我总是一次调用所有测试。那么,一个元组列表?你知道吗


Tags: intestselfnoneforreturnifinit
3条回答

您可以简单地使用listtuples,如下所示:

self._TESTS =[("v1", self.test1), ...]

是的,使用tuples列表,顺序保留,不需要dict,因为不需要查找。循环只是略有不同,不再是.items(),而是直接解包:

class A:
    def __init__(self):
        self._TESTS = [
            ('val1', self.test1),
            #...
            ('val10', self.test10)
        ]
    def test(self, x):
        for v, f in self._TESTS:
            if f(x):
                return v
        return None

如果测试函数按任意顺序放置-请使用已排序的元组列表:

class A:
    def __init__(self):
        self._TESTS = [
            (2, 'val10', self.test10),
            ...
            (1, 'val1', self.test1),
            #...                
        ]

    def test(self, x):
        for t in sorted(self._TESTS):
            if t[2](x):
                return t[1]
        return None

相关问题 更多 >