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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
用Python脚本来删除指定容量以上的文件的教程
May 04 Python
Python下载懒人图库JavaScript特效
May 28 Python
理解python正则表达式
Jan 15 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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面向对象全攻略 (九)访问类型
2009/09/30 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
基于jQuery的动态表格插件
2011/03/28 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python 多线程的实例详解
2017/09/07 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python实现超市商品销售管理系统
2019/11/22 Python
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
建龙钢铁面试总结
2014/04/15 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
元旦晚会感言
2014/03/12 职场文书
消防标语大全
2014/06/07 职场文书
2014教师研修学习体会
2014/07/08 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
教师节联欢会主持词
2015/07/04 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
Python自动化实战之接口请求的实现
2022/05/30 Python