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中私有函数调用方法解密
Apr 29 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
Python实现的KMeans聚类算法实例分析
Dec 29 Python
python+mysql实现教务管理系统
Feb 20 Python
详解python读取image
Apr 03 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Python tkinter和exe打包的方法
Feb 05 Python
什么是python的id函数
Jun 11 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
Python3获取cookie常用三种方案
Oct 05 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
深入讲解Python中的迭代器和生成器
2015/10/26 Python
详解supervisor使用教程
2017/11/21 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
和平主题的演讲稿
2014/01/12 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL