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写asp详细讲解
Dec 16 Python
Python中正则表达式的用法实例汇总
Aug 18 Python
讲解Python中fileno()方法的使用
May 24 Python
Python如何判断数独是否合法
Sep 08 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
python中csv文件的若干读写方法小结
Jul 04 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
python pygame实现五子棋小游戏
Oct 26 Python
django中的数据库迁移的实现
Mar 16 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 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中的时间处理
2006/10/09 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
Python中一些深不见底的“坑”
2019/06/12 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
python 调试冷知识(小结)
2019/11/11 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
货代行业个人求职简历的自我评价
2013/10/22 职场文书
营销总经理的岗位职责
2013/12/15 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
质量安全标语
2014/06/07 职场文书
电影复兴之路观后感
2015/06/02 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js