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的collections模块中的OrderedDict有序字典
Jul 07 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
python版学生管理系统
Jan 10 Python
Python3生成手写体数字方法
Jan 30 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
python处理multipart/form-data的请求方法
Dec 26 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
解决python便携版无法直接运行py文件的问题
Sep 01 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
理解 JavaScript Scoping & Hoisting(二)
2015/11/18 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
行政人员工作职责
2013/12/05 职场文书
园林施工员岗位职责
2013/12/11 职场文书
小学教师听课制度
2014/02/01 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
聚美优品励志广告词
2014/03/14 职场文书
售后服务承诺书范文
2014/03/26 职场文书
学雷锋月活动总结
2014/04/25 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
母亲节主题班会
2015/08/14 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
Java spring定时任务详解
2021/10/05 Java/Android
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers