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实现的jpg格式图片修复代码
Apr 21 Python
详细讲解Python中的文件I/O操作
May 24 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
Python Requests库基本用法示例
Aug 20 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
linux 下selenium chrome使用详解
Apr 02 Python
pandas分批读取大数据集教程
Jun 06 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
python Tkinter模块使用方法详解
Apr 07 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
js 处理URL实用技巧
2010/11/23 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python3中的md5加密实例
2018/05/29 Python
python实现五子棋小游戏
2020/03/25 Python
django中瀑布流写法实例代码
2019/10/14 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python3的socket使用方法详解
2020/02/18 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
Python的collections模块真的很好用
2021/03/01 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
教研活动总结
2014/04/28 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2014年班组长工作总结
2014/11/20 职场文书
幼儿园辞职信
2015/05/13 职场文书
交通事故被告答辩状
2015/05/22 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书