Python中用字符串调用函数或方法示例代码


Posted in Python onAugust 04, 2017

前言

本文主要给大家介绍了关于Python用字符串调用函数或方法的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

先看一个例子:

>>> def foo():
    print "foo"

>>> def bar():
    print "bar"

>>> func_list = ["foo","bar"]
>>> for func in func_list:
    func()
TypeError: 'str' object is not callable

我们希望遍历执行列表中的函数,但是从列表中获得的函数名是字符串,所以会提示类型错误,字符串对象是不可以调用的。如果我们想要字符串变成可调用的对象呢?或是想通过变量调用模块的属性和类的属性呢?

以下有三种方法可以实现。

eval()

>>> for func in func_list:
    eval(func)()
foo
bar

eval() 通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。eval() 功能强大但是比较危险(eval is evil),不建议使用。

locals()和globals()

>>> for func in func_list:
    locals()[func]()
foo
bar

>>> for func in func_list:
    globals()[func]()
foo
bar

locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。

getattr()

getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。

返回 foo 模块的 bar 方法

>>> import foo
>>> getattr(foo, 'bar')()

返回 Foo 类的属性

>>> class Foo:
  def do_foo(self):
    ...

  def do_bar(self):
    ...

>>> f = getattr(foo_instance, 'do_' + opname)
>>> f()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

参考

Calling a function of a module from a string with the function's name in Python

How do I use strings to call functions/methods?

Python 相关文章推荐
Python中无限元素列表的实现方法
Aug 18 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python中暂存上传图片的方法
Feb 18 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python查看微信好友是否删除自己
Dec 19 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Python图片的横坐标汉字实例
Dec 04 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Python decimal模块使用方法详解
Jun 08 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Python编程实现的图片识别功能示例
Aug 03 #Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 #Python
详解 Python中LEGB和闭包及装饰器
Aug 03 #Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 #Python
python中MethodType方法介绍与使用示例
Aug 03 #Python
初学python的操作难点总结(新手必看篇)
Aug 03 #Python
python 禁止函数修改列表的实现方法
Aug 03 #Python
You might like
新版PHP极大的增强功能和性能
2006/10/09 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
查看django版本的方法分享
2018/05/14 Python
Python异常处理操作实例详解
2018/08/28 Python
python中dict使用方法详解
2019/07/17 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
实现Python与STM32通信方式
2019/12/18 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
三严三实对照检查材料
2014/09/22 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
就业意向书范本
2015/05/11 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers