【python】python实现函数指针映射表

文章目录

      • 序言
      • [1. 函数指针](#1. 函数指针)
      • [2. python使用函数指针制作映射表](#2. python使用函数指针制作映射表)

序言

  • 希望实现"根据不同场景调用不同的数据挖掘函数"

1. 函数指针

  • C语言中有函数指针的概念,可以通过建立映射表来完成对应功能函数的调用,类似

    c 复制代码
    类型1 : 函数指针1
    类型2 : 函数指针2
    ...
    类型n : 函数指针n

    可以通过hashMap或者数组(每个元素存储函数指针)来调用不同类型对应的功能函数

  • python中也可以实现类似的功能,同样的,可以根据不同类型选择调用对应的功能函数

  • 这里映射表功能的实现基于这样一个事实:函数名是指针常量,可以赋值给指针,也可以赋值给常引用,进而也可以作为函数参数

2. python使用函数指针制作映射表

  • 赋值与调用

    python 复制代码
    def 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
    • 这里使用字典来建立映射表
  • 作为函数参数

    python 复制代码
    def 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
  • 建立映射表实例

    python 复制代码
    tag_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

相关推荐
niuniu_66620 分钟前
selenium应用测试场景
python·selenium·测试工具·单元测试·测试
满怀10151 小时前
Python扩展知识详解:lambda函数
开发语言·python
蓝博AI3 小时前
基于卷积神经网络的眼疾识别系统,resnet50,efficentnet(pytorch框架,python代码)
pytorch·python·cnn
牧歌悠悠5 小时前
【Python 算法】动态规划
python·算法·动态规划
Doris Liu.7 小时前
如何检测代码注入(Part 2)
windows·python·安全·网络安全·网络攻击模型
逢生博客7 小时前
阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)
人工智能·python·语音识别·funasr
噔噔噔噔@7 小时前
软件测试对于整个行业的重要性及必要性
python·单元测试·压力测试
赵谨言7 小时前
基于Python的Django框架的个人博客管理系统
经验分享·python·毕业设计
Guarding and trust8 小时前
python系统之综合案例:用python打造智能诗词生成助手
服务器·数据库·python
淮北4948 小时前
ros调试工具foxglove使用指南三:在3d空间写写画画(Panel->3D ->Scene entity)
python·学习·3d·机器人