【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

相关推荐
诸神缄默不语28 分钟前
Python 3中的win32com使用教程+示例:从Excel读取数据生成Word格式报告批量发邮件
python·word·excel
草莓熊Lotso2 小时前
unordered_map/unordered_set 使用指南:差异、性能与场景选择
java·开发语言·c++·人工智能·经验分享·python·网络协议
二川bro6 小时前
量子计算入门:Python量子编程基础
python
夏天的味道٥7 小时前
@JsonIgnore对Date类型不生效
开发语言·python
tsumikistep8 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
小白学大数据8 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
头发还在的女程序员10 小时前
三天搞定招聘系统!附完整源码
开发语言·python
温轻舟10 小时前
Python自动办公工具06-设置Word文档中表格的格式
开发语言·python·word·自动化工具·温轻舟
花酒锄作田10 小时前
[python]FastAPI-Tracking ID 的设计
python·fastapi
AI-智能10 小时前
别啃文档了!3 分钟带小白跑完 Dify 全链路:从 0 到第一个 AI 工作流
人工智能·python·自然语言处理·llm·embedding·agent·rag