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定时器使用示例分享
Feb 16 Python
kNN算法python实现和简单数字识别的方法
Nov 18 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
用Python解析XML的几种常见方法的介绍
Apr 09 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
有关Python的22个编程技巧
Aug 29 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
详解Python模块化编程与装饰器
Jan 16 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
简单的js分页脚本
2009/05/21 Javascript
JavaScript 高级语法介绍
2009/06/15 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
Python 元组(Tuple)操作详解
2014/03/11 Python
python实现根据图标提取分类应用程序实例
2014/09/28 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
Java程序员面试题
2016/09/27 面试题
警察思想汇报
2014/01/04 职场文书
小学生考试获奖感言
2014/01/30 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
毕业实习单位意见
2015/06/04 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
MySQL数据库事务的四大特性
2022/04/20 MySQL