[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. ...
随机推荐
- 利用java8对设计模式的重构
java8中提供的很多新特性可以用来重构传统设计模式中的写法,下面是一些示例: 一.策略模式 上图是策略模式的类图,假设我们现在要保存订单,OrderService接口定义要做什么,而NoSqlSav ...
- Spark2.3(三十七):Stream join Stream(res文件每天更新一份)
kafka测试数据生成: package com.dx.kafka; import java.util.Properties; import java.util.Random; import org. ...
- Juno Puppet Opertaors Meetup小结
今年五月刚结束的Juno OpenStack Summit是半年一度的Openstack盛会,抛去那些迷花渐欲乱人眼的商业活动,我们来看一看本届summit puppet-openstack社区有哪些 ...
- [Python设计模式] 第3~5章 单一职责原则/开放-封闭原则/依赖倒转原则
github地址:https://github.com/cheesezh/python_design_patterns 单一职责原则 就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责 ...
- grid - 重复网格轨道
使用repeat()可以创建重复的网格轨道.这个适用于创建相等尺寸的网格项目和多个网格项目 <view class="grid"> <view class='gr ...
- eclipse:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bui ...
- C# Chart使用总结 2 ---------chart悬停选定数值操作
1.用鼠标悬停事件处理 private void Form1_Load(object sender, EventArgs e) { //connStr = connPath1 + conn2; fil ...
- MySql之删除操作
一:删除特定行 DELETE FROM 表名 WHERE 条件: 二:删除所有行 TRUNCATE TABLE 表名; //删除重建一张表
- 创建py模板
创建模板之后,每次新建py文件,已初始定义的代码段将会自动出现在py文件中.
- GIT无法自动忽略YellowRV1.1.uvgui.Administrator文件的解决方法
原来这个YellowRV1.1.uvgui.Administrator文件是在.gitignore之前被提交进服务器的,.gitignore对已经存在服务器里的文件是不起作用的.按照回答里投票最高的答 ...