一、说明

除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如eval("print(__file__)"),这还是比较简单的。

但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现。

二、通过eval实现

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

class TestA:def __init__(self):self.config_dict = {"be_called_function_name": "self.be_called_function()",}passdef 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)passdef be_called_function(self):print("here is be_called_function.")if __name__ == "__main__":obj = TestA()obj.active_call_function()

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class TestA:def __init__(self):self.config_dict = {"be_called_function_name": "be_called_function()",}passdef 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)passdef be_called_function():print("here is be_called_function.")if __name__ == "__main__":obj = TestA()obj.active_call_function()

三、通过getattr实现

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

class TestA:def __init__(self):self.config_dict = {"be_called_function_name": "be_called_function",}passdef 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()passdef 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",}passdef 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()passclass TestB:def be_called_function(self):print("here is be_called_function.")if __name__ == "__main__":obj = TestA()obj.active_call_function()

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import sysclass TestA:def __init__(self):self.config_dict = {"be_called_function_name": "be_called_function",}passdef 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()passdef 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",}passdef 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()passif __name__ == "__main__":obj = TestA()obj.active_call_function()

Python教程:通过函数名调用函数的3种场景实现相关推荐

  1. 通过函数名调用函数和通过函数指针调用函数有什么区别呢?为什么调用函数指针没有直接调用函数效率高?

     1.通过函数名调用函数和通过函数指针调用函数有什么区别呢? 首先函数名.函数指针都表示代码段的起始地址. 1)调用函数的时候必须指定函数名,可是当有时候不确定具体调用哪个函数,当某些事件发生后才 ...

  2. 简明 Python 教程学习笔记_2_函数

    1. Python 内建函数 Python 内建函数:https://docs.python.org/zh-cn/3.9/library/functions.html#classmethod Pyth ...

  3. 简明Python教程学习笔记_2_函数

    函数 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低...并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常 ...

  4. Python教程:内置函数filter()和匿名函数lambda解析

    一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...

  5. js将字符串作为函数名调用函数

    需求:获取JSON对象的函数名称,并执行该函数. 解决:用eval函数,字符串转换为命令行执行都可以通过eval函数. 计算 JavaScript 字符串,并把它作为脚本代码来执行. function ...

  6. 066-PHP通过函数名调用函数

    <?phpfunction hello(){ //定义函数echo '<br />Hello!<br />';}function hellophp(){ //定义函数ec ...

  7. 【Python 教程】list 列表遍历的 4 种方法

    第一种:使用 for 循环遍历 list = ["01", "02", "03", "04"]for num in li ...

  8. python教程学习

    python教程学习 一. ubuntu基本使用 1.简介 1.1. 目录 1.2. 常用命令基本使用 1.3 终端命令 1.4 查阅命令帮助信息 2. 文件目录相关 2.1 **通配符的使用** 2 ...

  9. C语言指针的那些事:第三篇(函数指针,指针函数,函数指针数组,指向函数指针数组的指针)

    文章目录 1. 函数指针 1)函数指针的例题 2. 指针函数 3. 函数指针数组 1)函数指针数组的用途 4. 指向函数指针数组的指针 5. 一些后话 1. 函数指针 函数指针就是指向函数的指针:本质 ...

最新文章

  1. 五分钟搞清楚MySQL事务隔离级别
  2. more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...
  3. jeecg如何控制用户权限_如何为用户定制个性化控制台?
  4. python 服务端与c++客户端通讯_[原创]python socket 服务端 与 c++客户端通讯,发包内容加密,支持大文件,并发...
  5. java 事务_Java中事务总结详解(精华)
  6. QMake Automatic Dependencies
  7. 基础编程题目集 7-4 BCD解密 (10 分)
  8. Google Maps API V2
  9. Spring AOP实现及运行期调用原理分析
  10. 分享5篇医疗数据挖掘论文(附pdf下载)
  11. OpenDDS环境搭建-Windows 10
  12. Mysql Nested-Loop Join算法和MRR
  13. 路由器和交换的本质区别解析
  14. 关于safiry开启无痕浏览时本地存储的处理
  15. 【火星备份软件】存储架构优势简介
  16. SQL注入漏洞测试(HTTP头注入)
  17. 华清远见上海中心22071班 9.30作业
  18. 专利地图制作及解析研究
  19. 关于召开“CIE2019第三届中国IT教育论坛”的通知
  20. 程序员职业生涯规划必读的十本书

热门文章

  1. WPF的Clipboard.SetText()有问题
  2. Windows Sockets错误标识及对应解释
  3. iOS开发系列--无限循环的图片浏览器
  4. tracert 路由跟踪程序
  5. 提高你的Java代码质量吧:少用静态导入
  6. (转)IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
  7. IT人的十八般武艺-操作系统
  8. 发布安全Web站点详细攻略:ISA2006系列之十四
  9. 【MM 模块】 Optimized Purchasing 优化采购 1
  10. 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强