Python3如何根据函数名动态调用函数

 更新时间:2023年11月10日 09:05:10   作者:开发者超屎  
这篇文章主要介绍了Python3如何根据函数名动态调用函数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

根据函数名动态调用函数

最近项目需求,需要动态调用函数,这里整理一下思路。

很多时候,我们需要根据外面传进来的字符串取动态调用函数,并获取返回值。

例如单项目检查等,检查的类型可以事先在定义文件中配置好,这样后期维护的时候,如果需要修改,直接修改配置文件就好了,而不必修改代码。

要动态调用,如果是在同一个模块(.py)中,直接使用eval(function_name)(param(如果有的话))。

如果是在一个模块中动态调用另一个模块中的函数,则需要使用 importlib 包。这里主要介绍 eval 用法, importlib 包的具体用法后面再做追加。

事先定义多个方法

# 检查文本类型是否为字符串
# @param text 文本
# @return True:是,False:不是
def __string(text):
    return True if isinstance(text, str) else False
 
 
# 检查文本类型是否为浮点型
# @param text 文本
# @return True:是,False:不是
def __float(text):
    if __string(text):
        try:
            return True if float("{0}".format(text)) else False
        except Exception:
            return False
    else:
        return True if isinstance(text, float) else False
 
 
# 检查文本类型是否为浮点型
# @param text 文本
# @return True:是,False:不是
def __int(text):
    if __string(text):
        try:
            return True if float("{0}".format(text)) else False
        except Exception:
            return False
    else:
        return True if isinstance(text, float) else False
 
 
# 检查文本类型是否为数字型
# @param text 文本
# @return True:是,False:不是
def __number(text):
    return True if re.search("[^0-9]", text) == None else False

然后再写一个函数来可以动态的调用这些函数(根据函数名字符串):

# 项目check
# @param tag 标签名
# @param text 文本
# @return True:OK, False:NG
def item_check(func_name, text):
    if type and text:
        try:
            # 调用导入模块中的函数,并传参
            return eval("__{0}".format(func_name))(text)
        except Exception:
            return False
    else:
        return False

现在,我们来测试一下这样的方法是否正确可用:

result = item_check("number", "123456")
    print("{0}是否为{1}:{2}".format("123456", "number", result))

运行程序,控制台输出:

123456是否为number:True

Process finished with exit code 0

说明我们的动态调用是OK的。

下面是完整的代码

文件:item_check.py

import re
 
 
# 检查文本类型是否为字符串
# @param text 文本
# @return True:是,False:不是
def __string(text):
    return True if isinstance(text, str) else False
 
 
# 检查文本类型是否为浮点型
# @param text 文本
# @return True:是,False:不是
def __float(text):
    if __string(text):
        try:
            return True if float("{0}".format(text)) else False
        except Exception:
            return False
    else:
        return True if isinstance(text, float) else False
 
 
# 检查文本类型是否为浮点型
# @param text 文本
# @return True:是,False:不是
def __int(text):
    if __string(text):
        try:
            return True if float("{0}".format(text)) else False
        except Exception:
            return False
    else:
        return True if isinstance(text, float) else False
 
 
# 检查文本类型是否为数字型
# @param text 文本
# @return True:是,False:不是
def __number(text):
    return True if re.search("[^0-9]", text) == None else False
 
 
# 项目check
# @param tag 标签名
# @param text 文本
# @return True:OK, False:NG
def item_check(func_name, text):
    if type and text:
        try:
            # 调用导入模块中的函数,并传参
            return eval("__{0}".format(func_name))(text)
        except Exception:
            return False
    else:
        return False
 
 
if __name__ == "__main__":
    result = item_check("number", "123456")
    print("{0}是否为{1}:{2}".format("123456", "number", result))

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python逐行读取文件内容的三种方法

    python逐行读取文件内容的三种方法

    这篇文章主要介绍了python逐行读取文件内容的三种方法,非常的简单,下面直接看代码吧
    2014-01-01
  • Python实现实时跟随微信窗口移动的GUI界面

    Python实现实时跟随微信窗口移动的GUI界面

    Python写一些简单的GUI界面也是非常简单的,并且Python有着丰富的库,这些库可以很方便我们去操作Windows系统。本文就来用Python编写一个实时跟随微信窗口移动的GUI界面吧
    2023-04-04
  • python多进程提取处理大量文本的关键词方法

    python多进程提取处理大量文本的关键词方法

    今天小编就为大家分享一篇python多进程提取处理大量文本的关键词方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python 常见的配置文件写法梳理汇总

    Python 常见的配置文件写法梳理汇总

    这篇文章主要介绍了Python 常见的配置文件写法梳理汇总,文章围绕主题展开主题相关梳理总结,需要的朋友可以参考一下
    2022-07-07
  • Python MNIST手写体识别详解与试练

    Python MNIST手写体识别详解与试练

    MNIST(官方网站)是非常有名的手写体数字识别数据集,在Tensorflow的官方网站里,第一个就拿它来做实战讲解,咱们也以此作为开始的项目
    2021-11-11
  • python实现H2O中的随机森林算法介绍及其项目实战

    python实现H2O中的随机森林算法介绍及其项目实战

    这篇文章主要介绍了python实现H2O中的随机森林算法介绍及其项目实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python使用matplotlib的savefig保存时图片保存不完整的问题

    python使用matplotlib的savefig保存时图片保存不完整的问题

    这篇文章主要介绍了python使用matplotlib的savefig保存时图片保存不完整的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python中元组的基础介绍及常用操作总结

    Python中元组的基础介绍及常用操作总结

    元组是一种不可变序列。元组变量的赋值要在定义时就进行,这就像C语言中的const变量或是C++的引用,定义时赋值之后就不允许有修改。元组存在的意义是:元组在映射中可以作为键使用,因为要保证键的不变性。元组作为很多内置函数和方法的返回值存在
    2021-09-09
  • django queryset相加和筛选教程

    django queryset相加和筛选教程

    这篇文章主要介绍了django queryset相加和筛选教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python模拟百度登录实例详解

    Python模拟百度登录实例详解

    最近公司产品和百度贴吧合作搞活动,为了增加人气,打算做个自动签到的小程序,接下来通过本文给大家介绍python模拟百度登录,感兴趣的朋友一起学习本段代码吧
    2016-01-01

最新评论