[Python] 动态函数调用(通过函数名)
2018-04-09 update
利用python中的内置函数 eval() ,函数说明:
def eval(*args, **kwargs): # real signature unknown
"""
Evaluate the given source in the context of globals and locals. The source may be a string representing a Python expression
or a code object as returned by compile().
The globals must be a dictionary and locals can be any mapping,
defaulting to the current globals and locals.
If only globals is given, locals defaults to it.
"""
pass
样例1:
def function2(name, age):
print("name: %s, age: %s" % (name, age)) if __name__ == '__main__':
eval("function2")("Alice", 11) # 或者:
args = ["Alice", 11]
kwargs = {}
eval("function2")(*args, **kwargs) """
输出结果都是:
name: Alice, age: 11
"""
样例2:
class Test(object):
states = [u"大于等于零", u"大于等于二"]
state2function = {u"大于等于零": "check_gt0", u"大于等于二": "check_gt2"} @staticmethod
def check_gt0(x):
return x >= 0 @staticmethod
def check_gt2(x):
return x >= 2 def predict(self, x):
for state in Test.states:
check_ans = eval("Test." + Test.state2function[state])(x) # 调用Test类中的方法
print(state, Test.state2function[state], x, check_ans) if __name__ == '__main__':
test = Test()
test.predict(x=-1)
test.predict(x=1)
test.predict(x=2) """
输出:
大于等于零 check_gt0 -1 False
大于等于二 check_gt2 -1 False
大于等于零 check_gt0 1 True
大于等于二 check_gt2 1 False
大于等于零 check_gt0 2 True
大于等于二 check_gt2 2 True
"""
*************************************************************************************************************************************************************
2017-08-09
由字符串函数名得到对应的函数
把函数作为参数的用法比较直观:
def func(a, b):
return a + b def test(f, a, b):
print f(a, b) test(func, 3, 5)
但有些情况下,‘要传递哪个函数’这个问题事先还不确定,例如函数名与某变量有关。可以利用 func = globals().get(func_name) 来得到函数:
def func_year(s):
print 'func_year:', s def func_month(s):
print 'func_month:', s strs = ['year', 'month']
for s in strs:
globals().get('func_%s' % s)(s)
"""
输出:
func_year: year
func_month: month
"""
参考:https://blog.csdn.net/lifestxx/article/details/78757345
[Python] 动态函数调用(通过函数名)的更多相关文章
- C++ 动态库导出函数名“乱码”及解决
C++ 动态库导出函数名“乱码”及解决 刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都“乱码”了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // ...
- 【图文】[新手]C++ 动态库导出函数名“乱码”及解决
刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都"乱码"了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // 下列 ifdef ...
- python 动态函数调用及可变参数传入
定义类及方法 class ParameterFactory(object): ..... def fullLinkTag(self, fromDate, toDate, status, cate='全 ...
- python 获取当前调用函数名等log信息
import sys funcName = sys._getframe().f_back.f_code.co_name #获取调用函数名 lineNumber = sys._getframe().f_ ...
- python --- 11 第一类对象 函数名 闭包 迭代器
一 .函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当做容器类 ...
- python基础学习Day11 函数名的应用、闭包、迭代器
一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...
- python学习之生函数名的理解
4.4.10 函数名的应用 函数名就是一个特殊的变量,后边跟上()之后可以执行函数: 1.作为一个变量使用 def func(): print('123') f1 = func f2 = f1 f1( ...
- python通过字符串定义函数名
记录python里的一个有意思的小技巧:通过字符串定义函数名称. import sys m=sys.modules[__name__] def temp(x): return x+1 setattr( ...
- 第6.4节 Python动态表达式计算:eval函数详述
在Python动态执行的函数中,eval是用于执行表达式计算的函数,这个函数用于执行字符串中包含的一个表达式或其编译后对应的代码,不能适用于执行Python语句和完整的代码. 一. 语法 1. ...
随机推荐
- C#高级编程9 第17章 使用VS2013-C#特性
C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...
- 用vue的自定义组件写了一个拖拽 组件,局部的 只能在自定义元素内的
简单实现 没有做兼容<!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 为Qemu aarch32开发板添加sd卡
Qemu: 2.8.0 开发板: vexpress 1.制作sd卡镜像 2.分区 sudo losetup /dev/loop0 fs_vexpress_1G.img sudo fdisk /dev/ ...
- (转)Fur Shader
转自:http://qiankanglai.me/misc/2014/11/15/fur-shader/ 花时间看了下毛发效果,苦于囊中羞涩没能买QuickFur.furFX等插件,最后找到了Fur ...
- Nginx——使用 Nginx 提升网站访问速度【转载+整理】
原文地址 本文是写于 2008 年,文中提到 Nginx 不支持 Windows 操作系统,但是现在它已经支持了,此外还支持 FreeBSD,Solaris,MacOS X~ Nginx(" ...
- C语言的原码,反码,补码
1)原码表示 原码表示法是机器数的一种简单的表示法.其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示.设有一数为x,则原码表示可记作[x]原. 例如,X1= +1010110 X2= 一1 ...
- 使用SpringBoot入门案例
一.创建项目 二.给根项目UnicomCmp的pom.xml,加入parent节点(spring-boot-starter-parent) <!--Add Spring boot Parent- ...
- Linux cut命令用法
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为: cut [-bn] [file] 或 cu ...
- UAC 实现原理及绕过方法-打洞专用
首页 新随笔 订阅 管理 随笔 - 7 文章 - 0 评论 - 0 UAC 实现原理及绕过方法 目录 0x01 UAC 实现方法(用户登陆过程)0x02 UAC 架构0x03 触发UAC0x0 ...
- synchronized和lock比较
一.synchronized的实现方案 1.synchronized能够把任何一个非null对象当成锁,实现由两种方式: a.当synchronized作用于非静态方法时,锁住的是当前对象的事例,当s ...