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 28 Python
Python yield 使用方法浅析
May 20 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
详解Python中的测试工具
Jun 09 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
python中threading开启关闭线程操作
May 02 Python
python如何保存文本文件
Jun 07 Python
Python编写单元测试代码实例
Sep 10 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
如何将数据从文本导入到mysql
2006/10/09 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
php 无限分类的树类代码
2009/12/03 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
javascript Object与Function使用
2010/01/11 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python对文件操作知识汇总
2016/05/15 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
np.dot()函数的用法详解
2020/01/17 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
计算机本科生自荐信
2013/10/15 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
英文请假条
2014/04/11 职场文书
葬礼主持词
2015/07/02 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书