先看一个例子:

>>> 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()

标准库operator下的methodcaller函数

>>> class Foo:
def do_foo(self):
print 1def do_bar(self):
print 2>>> f = Foo()
>>> from operator import methodcaller
>>> methodcaller('do_foo')(f)

python3 调用字符串对应的函数相关推荐

  1. python3 format函数_Python学习教程:Python3之字符串格式化format函数详解(上)

    Python学习教程:Python3之字符串格式化format函数详解(上) 概述 在Python3中,字符串格式化操作通过format()方法或者f'string'实现.而相比于老版的字符串格式化方 ...

  2. format函数_Python学习教程:Python3之字符串格式化format函数详解(上)

    Python学习教程:Python3之字符串格式化format函数详解(上) 概述 在Python3中,字符串格式化操作通过format()方法或者f'string'实现.而相比于老版的字符串格式化方 ...

  3. Python3之字符串格式化format函数详解(下)

    格式限定符 format通过丰富的的"格式限定符"(语法是 {}中带:号)对需要格式的内容完成更加详细的制定. 进制转换 我们可以再限定符中制定不同的字符对数字进行进制转换的格式化 ...

  4. Python3空字符串和len()函数

  5. C语言试题三十三之比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

    1. 题目 请编写函数function,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符串长度相同,则返回第一个字符串. 2 .温馨提示 ...

  6. python3的格式化用法_浅析python3字符串格式化format()函数的简单用法

    format()函数 """ 测试 format()函数 """ def testformat(): # format()函数中有几个元素, ...

  7. 25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字 符串。

    25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符串长度相同,则返回第一个字 符串. 例如,输入:beijing ...

  8. Python3:字符串处理函数

    文章目录 python3-字符串基本处理 一.字符串转义和查找 二.字符串空白.数字大小写判断 三.字符串切割 四.字符串拼接 五.字符串格式化 总结 python3-字符串基本处理 基本功能处理: ...

  9. YDOOK:Python3.9: breakpoint(*args, **kws) 函数:在调用时进入调试器中 详细用法

    YDOOK:Python3.9: breakpoint(*args, **kws) 函数:在调用时进入调试器中 详细用法 © YDOOK JY Lin 1. 原理: 该函数会调用 sys.breakp ...

最新文章

  1. poj3041--Asteroids(二分匹配)[将矩阵行列转化为边]
  2. precede和previous_Previous Analyses of Hungarian Phrase Structure
  3. java 数组下标6,这里为什么用equals会错,改==就不会?java入门第一集6.8获取数组下标课后练习...
  4. 普通路由器改4g路由器_4G宽带随心用,办公娱乐更自由,蒲公英X4C路由器体验|路由器|蒲公英|宽带|wifi|sim...
  5. 半学期学计算机有感论文,【计算机学习心得论文】_计算机学习心得论文参考资料-毕业论文范文网...
  6. Wscript.Shell 对象详细介绍(编写.VBS)
  7. AMD第三季:站在金融危机对面
  8. 怎样去除excel表中的虚线_Excel表格里的虚线如何去掉?
  9. Bailian4016 班级排名【稳定排序】
  10. oracle中decode方法使用
  11. python实现列表的排列和组合
  12. RxJava在Android中的简单应用
  13. LINUX C获取并设置环境变量
  14. 毕设题目:Matlab优化分配
  15. 海康威视网络摄像头管理员登录密码重置
  16. PowerBuilder 开发的游戏(建房子)
  17. 实验3:视频播放小程序
  18. 房子装修选择自装,物业办装修手续,需要哪些资料?
  19. 2021-09-18 Android repo 镜像服务器搭建
  20. linux为什么不需要磁盘碎片整理,Linux不用磁盘碎片整理原因分析.doc

热门文章

  1. 2021/11/24 微软亚州研究院游记
  2. 云计算技术 — 云计算的未来
  3. 5G 标准 — R18
  4. 云南昆明:看猪展迎猪年
  5. 22. 一个题来探查对 字符串,指针,数组三方面的关联使用方面的概念是否清晰,分析下面三个printf打印什么?...
  6. visual studio 的git插件推荐
  7. SVM学习笔记5-SMO
  8. MYSQL-使用mysqldump创建数据库快照
  9. 《Redis in action》读书笔记
  10. js插件类库组织与管理