使用变量作为名称将函数名称连接到另一个函数

时间:2018-04-05 08:45:13

标签: python function variables

对于关于人工智能的学校项目,我需要能够将函数名称连接到另一个函数,例如:

def b_test(x):
    return x+1

def a_test(x):
    return x

variable = "b"
variable+= "_test"
a_test = variable

But this happenned

我想Python希望使用名称" b"作为函数a_test的新名称/别名,而不是使用b_test作为新名称。

那么我如何强制python看看b意味着什么而不仅仅是使用它呢?

修改

我想做的是:

我的变量variable中包含字符串b,当我在代码a_test(x)中使用时,我需要返回x + 1(函数的返回值{{1} }})。所以我添加字符串" _test"变量因此它是" b_test"。

我可以通过编码

来做到这一点
b_test

但我不会只将a_test连接到b_test,它可能是c_test或d_test,这就是我需要使用变量的原因。

2 个答案:

答案 0 :(得分:0)

您的示例应该可以正常工作,但它不会反映屏幕截图中的实际代码和错误。在屏幕截图中,您试图从mlp_functions模块获取ChosenFunction,该模块没有该属性,因此是AttributeError。要使用str名称从模块获取属性,您需要使用getattr,如:

mlp_functions.logistic_function = getattr(mlp_functions, ChosenFunction)

答案 1 :(得分:0)

首先,您需要构造函数名称(来自您的变量)并检索模块名称,以便您可以在所需的变量中加载python函数对象。

以下是代码:

def b_test(x):
    return x + 1


def a_test(x):
    return x


def main():
    # Construct function name
    test_option = "b"  # "a"                                                                                                                                                                                                                                                   
    test_name = test_option + "_test"

    # Retrieve function module
    import os
    import importlib
    module_name = os.path.splitext(os.path.basename(__file__))[0]
    module = importlib.import_module(module_name)

    # Retrieve function
    test = getattr(module, test_name)

    # Debug information
    if __debug__:
        print ("Current file: " + str(__file__))
        print ("Module name: " + str(module_name))
        print ("Module: " + str(module))
        print ("Test function name: " + str(test_name))
        print ("Test function: " + str(test))

    # Execute function
    result = test(1)
    print ("Result: " + str(result))


if __name__ == '__main__':
    main()

一些重要的注释:

  • 测试选项只是一个包含要加载的测试函数的字符串。
  • 不要“重命名”a_test函数,只需使用指向正确函数的test变量来执行
  • getattr函数对文件名和模块有点棘手,因此如果修改此代码,您可能希望修改函数模块的计算方式。