如何在 Python 中构建用于迭代尝试的方法列表?

How can i build a list of Methods for iterative try in Python?

我有一个具有不同级别的数据结构,如下所示: 数据1--方法1--数据2--方法2--数据3 Data2=Data1.method1

每个级别的数据需要不同的方法来处理。我想知道我是否可以构建一个 Methode 列表以“深入挖掘”,例如 [Method1、Method2、...]。我将通过尝试列表中的所有方法来编写一个循环来“挖掘”数据。

我有这个想法是因为我们在python中调用方法时会在屏幕上输入字符串,例如我输入print()来调用打印函数。我们能否使方法的字符串可替换,以便我可以将 print() 更改为 list() 或其他内容?

那么我可以建立这样一个“方法列表”吗?如果可以,我应该使用什么数据类型?

在 python 中,方法可以像变量一样对待。

下面是两个不包含输入参数的不同方法函数的示例。

def method1():
    # do something
    return 1

def method2():
    # do something else
    return 2


methods = [method1, method2]

for m in methods:
    print(m())

你需要小心参数,如果他们都期望相同的输入,它会更容易。下面是另一个例子,其中两个方法被添加到一个列表中,它们都需要一个整数作为参数。

def method1(arg):
    # do something
    return arg*1

def method2(arg):
    # do something else
    return arg*2


methods = [method1, method2]

for m in methods:
    print(m(5))

此外,我们可以考虑一种方法正在尝试可能不起作用的情况。为此,我们可以在循环中添加一个 try / except 块。如果我们尝试的方法抛出异常,这将继续循环。

def method0(arg):
    return arg/(arg - 5)

def method1(arg):
    # do something
    return arg*1

def method2(arg):
    # do something else
    return arg*2

methods = [method0, method1, method2]

for m in methods:
    try:
        print(m(5))
    except:
        print(f'{m.__name__} did not work')

产生输出

method0 did not work
5
10

假设您有一个 class 对象,其中包含 functions/methods。这些可以添加到这样的列表中:

class DataType:
    val = 5
    def method0(self, arg):
        return arg/(arg - self.val)
    
    def method1(self, arg):
        # do something
        return arg*1
    
    def method2(self, arg):
        # do something else
        return arg*2

# instantiate the class object
obj = DataType()

# add methods to list from the object
methods = [obj.method0, obj.method1, obj.method2]

for m in methods:
    try:
        print(m(5))
    except:
        print(f'{m.__name__} did not work')

生成与上面相同的输出

method0 did not work
5
10