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中提取域名的几种方法
Sep 26 Python
python集合用法实例分析
May 30 Python
python通过加号运算符操作列表的方法
Jul 28 Python
Python线程创建和终止实例代码
Jan 20 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
python基于SMTP协议发送邮件
May 31 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
Python如何执行系统命令
Sep 23 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/12/13 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
心扬JS分页函数代码
2010/09/10 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
vue如何判断dom的class
2018/04/26 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
django 将model转换为字典的方法示例
2018/10/16 Python
python制作简单五子棋游戏
2019/06/18 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
全陪导游欢迎词
2014/01/17 职场文书
表决心的诗句大全
2014/03/11 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
步步惊心观后感
2015/06/12 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL