【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

相关推荐
qq_3363139311 小时前
java基础-IO流(随机点名器)
java·开发语言·python
liu****11 小时前
深度学习简介
人工智能·python·深度学习·python基础
无垠的广袤11 小时前
【工业树莓派 CM0 NANO 单板计算机】基于舵机和人脸识别的智能门禁系统
linux·python·opencv·yolo·ai·树莓派
大学生毕业题目11 小时前
毕业项目推荐:102-基于yolov8/yolov5/yolo11的行人车辆检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·行人车辆检测
嫂子的姐夫11 小时前
017-续集-贝壳登录(剩余三个参数)
爬虫·python·逆向
4***175411 小时前
Python 小游戏实战:打造视觉精美的数独小游戏
开发语言·python·pygame
星浩AI11 小时前
从0到1:用LlamaIndex工作流构建Text-to-SQL应用完整指南
人工智能·后端·python
我是小疯子6611 小时前
VSCode远程Python开发:保姆级SSH教程
python
OliverZhao11 小时前
iPhoto:基于 Python + PySide6 的高性能 macOS 风格照片管理器
python
SoRound11 小时前
【Shopee Games AI 模型使用经验】年度总结之 ------ 识别人脸特征,生成动漫形象
python·openai