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函数缺省值与引用学习笔记分享
Feb 10 Python
Python datetime时间格式化去掉前导0
Jul 31 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
Python正则表达式完全指南
May 25 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
Python将string转换到float的实例方法
Jul 29 Python
基于python修改srt字幕的时间轴
Feb 03 Python
python文件和文件夹复制函数
Feb 07 Python
如何在django中运行scrapy框架
Apr 22 Python
python 合并多个excel中同名的sheet
Jan 22 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简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python3抓取中文网页的方法
2015/07/28 Python
Python中的getopt函数使用详解
2015/07/28 Python
Python生成随机数组的方法小结
2017/04/15 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
销售经理工作失职检讨书
2014/10/24 职场文书
公务员考察材料范文
2014/12/23 职场文书
布达拉宫导游词
2015/02/02 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js