【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_dict3 = 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

相关推荐
卷无止境13 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋14 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc14 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂16 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋18 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢19 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚20 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机21 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_1 天前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰1 天前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain