根据 python 3.x 中的输入调用各种函数

Calling various function based on input in python 3.x

我正在编写一些代码以从 class(从“.csv”文件中提取数据)中获取各种数据。我想知道是否有一种方法可以根据输入的名称调用这些方法之一

我试图创建一个名为 get() 的函数,它接收 'param_name' - 我要调用的 class 中包含的方法的名称。我想知道是否有更优雅的方法来解决这个问题而无需创建大量 if 语句。

def get(param_name):
    # Some initialisation of the .csv file goes here. This works as intended.

    list_of_objects = [] # Initialised above, as a list of objects with methods function1(), function2() for getting data out of the .csv
    for item in list_of_objects:
        if param_name == "name of function 1":
            return function1()
        if param_name == "name of function 2":
            return function2()

你可以使用 __getattribute__:

class Alpha:
    def f1(self):
        print("F1")

x = Alpha()
x.__getattribute__('f1')()

您可以将函数存储在字典中:

function_dict = {
    'function_1': function_1, 
    'function_2': function_2
}

要使用这些,您可以这样做:

function_to_use = function_dict.get(param_name)
function_to_use(*args, **kwargs) # *args, **kwargs are arguments to be used.

如果您想 return 将函数应用于 list_of_objects 中的所有 item 之后的列表,而不是 for 循环,您可以这样做:

list(map(function_to_use, list_of_objects))

您可以使用 globals()、globals() returns 包含所有方法和属性的字典来做到这一点。

def fun1():
    print('this is fun1')

def fun2():
    print('this is fun2')

def get(func_name):
    globals()[func_name]()

get('fun1')
get('fun2')

将输出:

this is fun1
this is fun2