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 实现堆排序算法代码
Jun 05 Python
详解Python中__str__和__repr__方法的区别
Apr 17 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
python使用zip将list转为json的方法
Dec 31 Python
python占位符输入方式实例
May 27 Python
Python实现快速排序的方法详解
Oct 25 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
Pandas数据分析的一些常用小技巧
Feb 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 中使用随机数的三个步骤
2006/10/09 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
Python 文件和输入输出小结
2013/10/09 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
单位绩效考核方案
2014/05/11 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
责任书格式
2015/01/29 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
Python实现照片卡通化
2021/12/06 Python