先看一个例子:

>>> def foo():

print("foo")

>>> def bar():

print("bar")

>>> func_list = ["foo","bar"]

>>> for func in func_list:

func()

TypeError: 'str' object is not callable

我们希望遍历执行列表中的函数,但是从列表中获得的函数名是字符串,所以会提示类型错误,

字符串对象是不可以调用的。如果我们想要字符串变成可调用的对象呢?

或是想通过变量调用模块的属性和类的属性呢?以下有三种方法可以实现。

python 使用函数名的字符串调用函数(4种方法)

1、eval()

eval() 通常用来执行一个字符串表达式,并返回表达式的值,在这里它将字符串转换成对应的函数");

eval() 功能强大但是比较危险(eval is evil),不建议使用

def foo():

print("foo_eval()")

def bar():

print("bar_eval()")

func_list = ["foo","bar"]

for func in func_list:

eval(func)()

2、locals()和globals()

locals() 和 globals() 是python的两个内置函数,通过它们可以一字典的方式访问局部和全局变量。

def foo():

print("foo_locals()")

def bar():

print("bar_locals()")

func_list = ["foo","bar"]

for func in func_list:

locals()[func]()

def foo():

print("foo_globals()")

def bar():

print("bar_globals()")

func_list = ["foo","bar"]

for func in func_list:

globals()[func]()

3、getattr()

getattr() 是 python 的内建函数,getattr(object,name) 就相当于 object.name,但是这里 name 可以为变量。

返回 Foo 模块的 bar 方法

>>> import Foo

>>> getattr(Foo, 'bar')()

返回 Foo 类的属性

class Foo:

def do_foo(self):

print("foo_getattr()")

def do_bar(self):

print("bar_getattr()")

func_list = ["foo","bar"]

f = Foo()

for func in func_list:

getattr(f, 'do_' + func)()

4、标准库operator下的methodcaller函数

from operator import methodcaller

class Foo:

def do_foo(self):

print("foo_methodcaller()")

def do_bar(self):

print("bar_methodcaller()")

func_list = ["foo","bar"]

f = Foo()

for func in func_list:

methodcaller("do_"+func)(f)

python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)相关推荐

  1. python字典去最值_python 比较字典value的最大值的几种方法

    python中获取字典的key列表和value列表 # -*- coding: utf-8 -*- # 定义一个字典 dic = {'剧情': 11, '犯罪': 10, '动作': 8, '爱情': ...

  2. python取出字典中最大值_python 比较字典value的最大值的几种方法

    python中获取字典的key列表和value列表 # -*- coding: utf-8 -*- # 定义一个字典 dic = {'剧情': 11, '犯罪': 10, '动作': 8, '爱情': ...

  3. python中怎么替换字母_python去除拼音声调字母,替换为字母的方法

    第一种方法 import sys import unicodedata s = "Lǐ Zhōu Wú" remap = { # ord返回ascii值 ord('\t'): '' ...

  4. C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是

    原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0.在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是不是 ...

  5. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  6. python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...

    前面简单介绍了python基本运算,这里再来简单讲述一下Python字符串相关操作 1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号 ...

  7. python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...

    一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...

  8. python字符串find函数实现_python中实现查找字符串的find函数

    原博文 2018-06-19 19:26 − 第五题:自己实现一个字符串的find函数1.在一个字符串中查找另一个字符串2.找到了返回第一次出现的位置3.没找到返回-14.参数s1为源字符串,参数s2 ...

  9. python 函数 过程_Python开发之【集合、函数和过程】

    一.数据类型分类: 1.可变不可变:通过id查看内存地址,修改后,内存地址改变的,则是不可变类型.反之可变 可变:列表,字典 不可变:字符串,数字,元组 2.访问顺序: 直接访问:数字 顺序访问:字符 ...

  10. 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块

    一.模块.包的概念 模块就是一个包含所有你定义的函数和变量的文件,其后缀名是.py. 模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 什么是包? 包,pa ...

最新文章

  1. 3550配置DHCP
  2. mybatis-plus 错误java.lang.NoClassDefFoundError: org
  3. hdfs数据节点分发什么协议_分布式文件系统HDFS解析
  4. Txt格式配置表无法解析的问题——BOM
  5. mysql enclosed by_MySQL导入格式化数据
  6. c# 上传excel数据总结(一)线程的使用
  7. 谷歌搜索算法分析及应对策略
  8. 计算机无法安装cad怎么办,安装cad时电脑提示已经安装怎么办 cad无法安装的解决方法...
  9. 史上最详细的梯度下降优化算法介绍(从SGD到Adam至Lookahead)
  10. Kotlin初学者笔记
  11. 51.com数十高层离职幕后:3年内乱因扩张失败,互联网营销
  12. Elasticsearch生命周期策略ilm_policy、索引模板template管理(一)
  13. 录屏状态监听之防录屏 - iOS
  14. JAVA企业邮箱发送
  15. python中pytest教程_Pytest安装新手详细教程
  16. expect免密登录
  17. 记录对接京东宙斯API -- 发布商品
  18. 麻省理工数学与计算机科学,哈佛和麻省理工学院数学专业哪个更好一点?
  19. java中集合的基础知识_javaSE基础知识之集合类
  20. HEP World‘s Classics寄语

热门文章

  1. java 可变参数列表 数组_java可变参数列表如何填充数组?
  2. php 函数频率,这是一些使用频率比较高的php函数……
  3. Windows下基于IIS服务的SSL服务器的配置
  4. CSS实现三栏布局(5种)
  5. robot framework学习五——AutoltLibrary库
  6. Spring中的AOP和属性注入
  7. burpsuite_pro的使用
  8. hello bokeyuan
  9. 实际开发中的问题积累【积累】
  10. 【Python】列表方法“+”与“extend()”区别