【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

相关推荐
kobe_OKOK_6 小时前
__getattr__和__getattribute__如何用
python
全栈弄潮儿7 小时前
Python实战第2期: 变量与数据类型
后端·python·agent
长沙三为智能科技7 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
Cc.Y7 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川7 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸7 小时前
排序算法介绍
python·算法·排序算法
笔墨登场说说7 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
MoRanzhi12038 小时前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
刘科领8 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源8 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计