如何从单独的文件中读取字符串和调用函数,python 3

时间:2017-09-15 14:20:18

标签: python-3.x function if-statement

我有一个文件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。

提前致谢。

1 个答案:

答案 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)