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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
深入浅析Python中的yield关键字
Jan 24 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
详解Django CAS 解决方案
Oct 30 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
简单介绍django提供的加密算法
Dec 18 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
python datetime时间格式的相互转换问题
Jun 11 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 Python
Python中itertools库的四个函数介绍
Apr 06 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP 面向对象详解
2012/09/13 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
PHPMailer发送邮件
2016/12/28 PHP
jQuery 1.0.2
2006/10/11 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
详解Python中find()方法的使用
2015/05/18 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python语音识别实践之百度语音API
2018/08/30 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
python和php哪个容易学
2020/06/19 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
一套C#面试题
2013/10/09 面试题
成语的广告词
2014/03/19 职场文书
实习单位鉴定评语
2014/04/26 职场文书
新品发布会策划方案
2014/06/08 职场文书
村级个人对照检查材料
2014/08/22 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
合伙经营协议书范本
2014/09/13 职场文书
大学生实习推荐信
2015/03/27 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
员工安全责任协议书
2016/03/22 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python