• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python通过函数名调用函数的几种方法总结

    一、通过eval实现

     常用内置函数

    (不用import就可以直接使用) :

    1.通过eval调用同一个类内的函数 eval()使用原因:

    1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。

    2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

    eval()函数

    eval(expression[, globals[, locals]])

    返回传入字符串的表达式的结果

    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "self.be_called_function()",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            be_called_function_name = self.config_dict["be_called_function_name"]
            # 就直接调用。如果有其他参数,一样地传就好了
            # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
            eval(be_called_function_name)
            pass
    
        def be_called_function(self):
            print("here is be_called_function.")
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    2.通过eval调用同一个文件内的一级函数

    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "be_called_function()",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            be_called_function_name = self.config_dict["be_called_function_name"]
            # 就直接调用。如果有其他参数,一样地传就好了
            # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
            eval(be_called_function_name)
            pass
    
    def be_called_function():
        print("here is be_called_function.")
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    二、通过getattr实现

    getattr() 函数用于返回一个对象属性值。语法如下:

    getattr(object, name[, default])

    getattr(object, name) = object.name
    getattr(a, ‘b')的作用就和a.b是一样的

    示例:

    result = obj.method(args)
     
    // 使用getattr
    func = getattr(obj, "method")
    result = func(args)
    // 或者写成一行
    result = getattr(obj, "method")(args)

    主要有两种异常,异常的安全用法:
    AttributeError:对象中没有该属性。

    try:
        func = getattr(obj, "method")
    except AttributeError:
        ...... deal
    else:
        result = func(args)
     
    // 或指定默认返回值
    func = getattr(obj, "method", None)
    if func:
        func(args)
    

    TypeError: 不可调用

    func = getattr(obj, "method", None)
    if callable(func):
        func(args)

    1.通过函数名调用同一个类内的函数

    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "be_called_function",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            # getaattr(module_name, function_name),module_name传self即可
            be_called_function = getattr(self, self.config_dict["be_called_function_name"])
            # 就直接调用。如果有其他参数,一样地传就好了
            be_called_function()
            pass
    
        def be_called_function(self):
            print("here is be_called_function.")
    
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    2.通过函数名调用其他类的函数

    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "be_called_function",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            # getaattr(module_name, function_name),module_name传被调用的函数所在的类的类实例
            testb_obj = TestB()
            be_called_function = getattr(testb_obj, self.config_dict["be_called_function_name"])
            # 就直接调用。如果有其他参数,一样地传就好了
            be_called_function()
            pass
    
    
    class TestB:
        def be_called_function(self):
            print("here is be_called_function.")
    
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    3.通过函数名调用同文件的一级函数

    import sys
    
    
    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "be_called_function",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            # getaattr(module_name, function_name),module_name传当前模块名
            module_name = sys.modules['__main__']
            be_called_function = getattr(module_name, self.config_dict["be_called_function_name"])
            # 就直接调用。如果有其他参数,一样地传就好了
            be_called_function()
            pass
    
    
    def be_called_function():
        print("here is be_called_function.")
    
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    4.通过函数名调用在其他文件的一级函数

    class TestA:
        def __init__(self):
            self.config_dict = {
                "be_called_function_name": "be_called_function",
            }
            pass
    
        def active_call_function(self):
            print("here is active_call_function.")
            # getaattr(module_name, function_name),module_name传函数所在模块名
            # __import__()传函数所在文件
            module_name = __import__("test_call_function_by_string1")
            be_called_function = getattr(module_name, self.config_dict["be_called_function_name"])
            # 就直接调用。如果有其他参数,一样地传就好了
            be_called_function()
            pass
    
    
    if __name__ == "__main__":
        obj = TestA()
        obj.active_call_function()
    

    到此这篇关于python通过函数名调用函数的几种方法总结的文章就介绍到这了,更多相关python通过函数名调用函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • OpenCV-Python实现通用形态学函数
    • Python量化交易实战之使用Resample函数转换“日K”数据
    • Python函数装饰器的使用教程
    • 解决Python中的modf()函数取小数部分不准确问题
    • 浅谈Python中的函数(def)及参数传递操作
    • Python基础之函数嵌套知识总结
    • python 定义函数 返回值只取其中一个的实现
    • 这三个好用的python函数你不能不知道!
    上一篇:Python爬虫实战之爬取京东商品数据并实实现数据可视化
    下一篇:只用Python就可以制作的简单词云
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python通过函数名调用函数的几种方法总结 python,通过,函数,名,调用,