文章目录
-
-
- 序言
- [1. 函数指针](#1. 函数指针)
- [2. python使用函数指针制作映射表](#2. python使用函数指针制作映射表)
-
序言
- 希望实现"根据不同场景调用不同的数据挖掘函数"
1. 函数指针
-
C语言中有函数指针的概念,可以通过建立映射表来完成对应功能函数的调用,类似
c类型1 : 函数指针1 类型2 : 函数指针2 ... 类型n : 函数指针n
可以通过hashMap或者数组(每个元素存储函数指针)来调用不同类型对应的功能函数
-
python中也可以实现类似的功能,同样的,可以根据不同类型选择调用对应的功能函数
-
这里映射表功能的实现基于这样一个事实:函数名是指针常量,可以赋值给指针,也可以赋值给常引用,进而也可以作为函数参数
2. python使用函数指针制作映射表
-
赋值与调用
pythondef f1(x): print('f1:'+x) def f2(x): print('f2:'+x) func_dict = {} func_dict[1] = f1 func_dict[2] = f2 func_dict[1]('hello') # 调用,输出f1 : hello func_dict[2]('world') # 调用,输出f2 : world
- 使用函数名,而不是f(),func_dict[3] = f()相当于把函数返回值作为value
- 这里使用字典来建立映射表
-
作为函数参数
pythondef minus(a, b): return a - b def compute(a, b, fun): result = fun(a, b) # 函数调用 print(result) if __name__ == "__main__": fun = minus # 函数指针赋值 compute(1, 1, fun) # 函数指针作为参数
- 向函数中传递函数名进行动态策略执行
- 输出为0
-
建立映射表实例
pythontag_functions = { "TURN_LEFT" : TAG_TURN_LEFT_FUNCTION, "TURN_RIGHT" : TAG_TURN_RIGHT_FUNCTION, "U_TURN" : TAG_U_TURN_FUNCTION, "STRAIGHT" : TAG_STRAIGHT_FUNCTION } def TAG_TURN_LEFT_FUNCTION(id, frames): xxx def TAG_TURN_RIGHT_FUNCTION(id, frames): xxx def TAG_FUNCTION(ids, frames): for id in ids: scenario = get_scenario(id, frames) tag_function[scenario](id, frames) # 根据不同场景调用对应打标函数
- 当然也可以通过match-case模式匹配来实现该功能,留待之后介绍
【参考文章】
python使用函数指针赋值
python实现类似函数指针功能
python函数指针作为参数
created by shuaixio, 2023.10.05