我有一个文件three_ways.py
。我有3个函数来计算3个不同的y
。
# The content of error_metrics.py
def way_1(x1, x2):
y = x1 - x2
return y
def way_2(x1, x2)
y = x1 ** 2 - x2 ** 2
return y
def way_3(x1, x2)
y = x1 * x2
return y
在我的主(另一个)py文件中,我想设计一个函数get_y()
。它接受一个字符串参数来控制使用哪种方式。
way = 'way_2'
y = get_y(x1, x2, way)
我可以使用if-elif语句,见下文。但我想避免使用if-elif。因为可以存在任意数量的不同way_n()
的函数,所以n可以是任意数。每当我在文件way_x()
中添加three_ways.py
函数时,我都必须在函数elif
中创建另一个get_y()
语句。当n
变大时,整个代码将难以阅读。
# starting point for making the function of get_y()
import three_ways
def get_y(x1, x2, way):
if way == 'way_1':
y = three_ways.way_1(x1, x2)
elif way == 'way_2':
y = three_ways.way_2(x1, x2)
elif way == 'way_3':
y = three_ways.way_3(x1, x2)
else:
print('Not implemented yet')
return y
那么请你帮我建一个这样的功能吗?它应该是高效,优雅,pythonic,并没有if-elif声明。我正在使用Python3。
提前致谢。
答案 0 :(得分:1)
如果您真的想要完全按照您的描述进行操作,可以使用getattr
来查看该功能:
way_func = getattr(three_ways, way)
y = way_func(x1, x2)
但是因为Python支持第一类函数(函数可以像其他数据类型一样传递),所以最好做Rob所说的,它只是传递函数本身:
def get_y(x1, x2, way_func):
return way_func(x1, x2)
get_y(4, 2, three_ways.way_2)