python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)
先看一个例子:
>>> 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种方法)相关推荐
- python字典去最值_python 比较字典value的最大值的几种方法
python中获取字典的key列表和value列表 # -*- coding: utf-8 -*- # 定义一个字典 dic = {'剧情': 11, '犯罪': 10, '动作': 8, '爱情': ...
- python取出字典中最大值_python 比较字典value的最大值的几种方法
python中获取字典的key列表和value列表 # -*- coding: utf-8 -*- # 定义一个字典 dic = {'剧情': 11, '犯罪': 10, '动作': 8, '爱情': ...
- python中怎么替换字母_python去除拼音声调字母,替换为字母的方法
第一种方法 import sys import unicodedata s = "Lǐ Zhōu Wú" remap = { # ord返回ascii值 ord('\t'): '' ...
- C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是
原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0.在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是不是 ...
- UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)
PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...
- python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...
前面简单介绍了python基本运算,这里再来简单讲述一下Python字符串相关操作 1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号 ...
- python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...
一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...
- python字符串find函数实现_python中实现查找字符串的find函数
原博文 2018-06-19 19:26 − 第五题:自己实现一个字符串的find函数1.在一个字符串中查找另一个字符串2.找到了返回第一次出现的位置3.没找到返回-14.参数s1为源字符串,参数s2 ...
- python 函数 过程_Python开发之【集合、函数和过程】
一.数据类型分类: 1.可变不可变:通过id查看内存地址,修改后,内存地址改变的,则是不可变类型.反之可变 可变:列表,字典 不可变:字符串,数字,元组 2.访问顺序: 直接访问:数字 顺序访问:字符 ...
- 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块
一.模块.包的概念 模块就是一个包含所有你定义的函数和变量的文件,其后缀名是.py. 模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 什么是包? 包,pa ...
最新文章
- 3550配置DHCP
- mybatis-plus 错误java.lang.NoClassDefFoundError: org
- hdfs数据节点分发什么协议_分布式文件系统HDFS解析
- Txt格式配置表无法解析的问题——BOM
- mysql enclosed by_MySQL导入格式化数据
- c# 上传excel数据总结(一)线程的使用
- 谷歌搜索算法分析及应对策略
- 计算机无法安装cad怎么办,安装cad时电脑提示已经安装怎么办 cad无法安装的解决方法...
- 史上最详细的梯度下降优化算法介绍(从SGD到Adam至Lookahead)
- Kotlin初学者笔记
- 51.com数十高层离职幕后:3年内乱因扩张失败,互联网营销
- Elasticsearch生命周期策略ilm_policy、索引模板template管理(一)
- 录屏状态监听之防录屏 - iOS
- JAVA企业邮箱发送
- python中pytest教程_Pytest安装新手详细教程
- expect免密登录
- 记录对接京东宙斯API -- 发布商品
- 麻省理工数学与计算机科学,哈佛和麻省理工学院数学专业哪个更好一点?
- java中集合的基础知识_javaSE基础知识之集合类
- HEP World‘s Classics寄语
热门文章
- java 可变参数列表 数组_java可变参数列表如何填充数组?
- php 函数频率,这是一些使用频率比较高的php函数……
- Windows下基于IIS服务的SSL服务器的配置
- CSS实现三栏布局(5种)
- robot framework学习五——AutoltLibrary库
- Spring中的AOP和属性注入
- burpsuite_pro的使用
- hello bokeyuan
- 实际开发中的问题积累【积累】
- 【Python】列表方法“+”与“extend()”区别