根据 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
我正在编写一些代码以从 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