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实现的阳历转阴历(农历)算法
Apr 25 Python
Python中字符串的格式化方法小结
May 03 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
mac系统安装Python3初体验
Jan 02 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
keras K.function获取某层的输出操作
Jun 29 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP与已存在的Java应用程序集成
2006/10/09 PHP
php通用防注入程序 推荐
2011/02/26 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python随机数分布random测试
2018/08/27 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
编辑个人求职信范文
2013/09/21 职场文书
转预备党员政审材料
2014/02/06 职场文书
团队经理竞聘书
2014/03/31 职场文书
产假请假条
2014/04/10 职场文书
欢迎横幅标语
2014/06/17 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技