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 11 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
Python正则表达式和re库知识点总结
Feb 11 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
numpy库reshape用法详解
Apr 19 Python
Python中有几个关键字
Jun 04 Python
Python连接Impala实现步骤解析
Aug 04 Python
Python从文件中读取数据的方法步骤
Nov 18 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 函数语法介绍一
2009/06/14 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP 类与构造函数解析
2017/02/06 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
解读Python中degrees()方法的使用
2015/05/18 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python PIL图片添加字体的例子
2019/08/22 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Python3 元组tuple入门基础
2020/02/09 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
影视动画专业个人的自我评价
2013/12/31 职场文书
先进个人申报材料
2014/12/30 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript