python singledispatch 根据传入参数的类型自动选择相应的实现

functools 模块中的 singledispatch 装饰器允许你定义一个函数,并根据传入参数的类型自动选择相应的实现。这在处理不同类型的输入时非常有用。

singledispatch 装饰器提供了一种在 Python 中实现函数重载的方式。虽然 Python 本身不支持传统的函数重载(即在同一个作用域中定义多个同名函数),但 singledispatch 允许你根据参数类型来选择不同的函数实现,从而实现类似重载的效果。

下面是一个简单的示例,展示了如何使用 singledispatch 装饰器:

from functools import singledispatch@singledispatch
def process(arg):raise NotImplementedError("Unsupported type")@process.register
def _(arg: int):return f"Processing an integer: {arg}"@process.register
def _(arg: str):return f"Processing a string: {arg}"@process.register
def _(arg: list):return f"Processing a list: {', '.join(map(str, arg))}"# 测试
print(process(10))       # 输出: Processing an integer: 10
print(process("hello"))  # 输出: Processing a string: hello
print(process([1, 2, 3]))  # 输出: Processing a list: 1, 2, 3

在上述示例中,process 函数根据传入参数的类型(int、str、list)选择不同的处理逻辑,这就是一种函数重载的形式。

再看一个实例:

from functools import singledispatchfrom outlines.fsm.guide import StopAtEOSGuide
from outlines.generate.api import SequenceGenerator, SequenceGeneratorAdapter
from outlines.models import MLXLM, VLLM, LlamaCpp, OpenAI
from outlines.samplers import Sampler, multinomial@singledispatch
def text(model, sampler: Sampler = multinomial()) -> SequenceGenerator:"""Generate text with a `Transformer` model.Note----Python 3.11 allows dispatching on Union types andthis should greatly simplify the code.Arguments---------model:An instance of `Transformer` that represents a model from the`transformers` library.sampler:The sampling algorithm to use to generate token ids from the logitsdistribution.Returns-------A `SequenceGenerator` instance that generates text."""fsm = StopAtEOSGuide(model.tokenizer)device = model.devicegenerator = SequenceGenerator(fsm, model, sampler, device)return generator@text.register(MLXLM)
def text_mlxlm(model: MLXLM, sampler: Sampler = multinomial()):return SequenceGeneratorAdapter(model, None, sampler)@text.register(VLLM)
def text_vllm(model: VLLM, sampler: Sampler = multinomial()):return SequenceGeneratorAdapter(model, None, sampler)@text.register(LlamaCpp)
def text_llamacpp(model: LlamaCpp, sampler: Sampler = multinomial()):return SequenceGeneratorAdapter(model, None, sampler)@text.register(OpenAI)
def text_openai(model: OpenAI, sampler: Sampler = multinomial()) -> OpenAI:if not isinstance(sampler, multinomial):raise NotImplementedError(r"The OpenAI API does not support any other sampling algorithm "+ "than the multinomial sampler.")return model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Sentence Transformer微调向量模型

Sentence Transformer库升级到了V3,其中对模型训练部分做了优化,使得模型训练和微调更加简单了,跟着官方教程走了一遍,顺利完成向量模型的微调,以下是对官方教程的精炼和总结。 一 所需组件 使用Sentence Transforme…

原生Ajax技术的执行流程,用火山写作创作的,总感觉差点意思。

启动原生Ajax操作可遵循以下步骤: 首先,我们需要构建一个XMLHttpRequest对象以实现与服务器的有效互动。这个过程往往是借助于调用XMLHttpRequest对象的构造函数得以实现。 接下来,我们有必要对请求细节进行设定,包括明确请求方法…

叹为观止|四款让人赞不绝口的优质软件,越用越上瘾

不说闲话直接上狠货,下面神仙软件,都值得使用。 Smart Defrag 说起电脑运行慢或者抽风,磁盘碎片就是让电脑变得又卡又不稳定的元凶之一。 不过Smart Defrag就算是新手小白也能操作,它里面藏着一个超强的碎片整理引擎&#xff0…

一.2.(5)共射、共集、共基三种基本放大电路的静态及动态分析;

共什么的问题:共什么取决于输入输出,共剩下的那一极 1.基本共射放大电路 见前面章节,不做累述 2.基本共集放大电路 列KVL方程,求解 AU1,所以又叫射极跟随器 Ib是流入基极的电流,Ii是从输入交流信号源流出的…

SpringBoot源码阅读(1)——环境搭建

SpringBoot官网 官网 https://spring.io/projects/spring-boot 代码仓库 github:https://github.com/spring-projects/spring-boot gitee: https://gitee.com/mirrors/spring-boot 下载代码 git clone https://gitee.com/mirrors/spring-boot.git下载的代码中有些…

(广东省检测鉴定协会)常用金属材料检测模拟题

一、单选题 1.钢筋实测抗拉强度与实测屈服强度之比不小于( )? A.1.25 B.1.3 C.1.35 D.1.1 参考答案:A 2.钢筋实测屈服强度与标准规定的屈服强度特征值之比不大于( )。 A.1.05 B.1.25 C.1.3 D.1.35 参考答案:C 3.HRB400E钢筋最大力总延伸率要求应不小于( ) A.7…

CnosDB:深入理解时序数据修复函数

CnosDB是一个专注于时序数据处理的数据库。CnosDB针对时序数据的特点设计并实现了三个强大的数据修复函数: timestamp_repair – 对时间戳列进行有效修复,支持插入、删除、不变等操作。value_repair – 对值列进行智能修复,根据时间戳间隔和…

【源代码】srm供应商管理系统,招标管理系统,在线询价管理系统

前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取平台私…

干冰运输与存储中的温度监测:确保药品安全与合规性

在制药行业,干冰对于运输和储存对温度敏感的药品,如原料药API、疫苗、冻干物质和人体组织样本等至关重要。虹科ELPRO LIBERO系列干冰温度记录仪,能够为您提供专业的解决方案,定期监测和记录干冰运输和存储过程中的温度&#xff0c…

基于Java+SpringMvc+Vue技术的就医管理系统设计与实现系统(源码+LW+部署讲解)

目录 界面展示 第六章 部分代码实现 6.1 Spring boot 配置代码 6.2 用户管理及登录登出代码 6.3 Md5 加密算法代码 6.4 部分数据库代码 六、论文参考: 七、其他案例: 系统介绍: 就医管理系统,也称为医院管理系统&#…

14-21 剑和远方1 - AI历史及简单神经网络的工作原理

初始 “我们需要走得更深”这句台词出自电影《盗梦空间》。这是在讨论深入梦境更深层次时说的,暗示需要探索梦境的更深层次。虽然这似乎是不可能的,但它传达的理念是,要创造一个新的世界,就必须冒险进入更深的层次。 电影《盗梦空…

docker安装oracle 11g

最近把一些常用数据库都移到docker了,而且是windows下,很是方便。偶尔还是要用一下Oracle,今天就试一下安装oracle 11g 在docker上。 一、搜索并拉取镜像 docker search oracle_11gdocker pull ![在这里插入图片描述](https://i-blog.csdni…

Soul App Android一二三面凉经(2024)

Soul App Android一二三面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是SoulApp Android一二三面凉经。 面试职位: Android开发 技术一面 面试时长: …

CDGA|数据治理:突破“采集难、应用难”的困境

随着数字化时代的来临,数据已成为企业最宝贵的资产之一。然而,如何有效地采集和应用这些数据,却成为众多企业面临的一大挑战。数据治理作为一种全面的数据管理框架,为解决数据采集难、应用难等问题提供了有效途径。 数据采集难的挑…

FuTalk设计周刊-Vol.064

#AI漫谈 热点捕手 1.可灵视频模型Web 端功能上线 文生视频:画质升级、单次10s视频生成;图生视频:画质提升、支持自定义首尾帧;运镜控制:提供丰富的镜头控制选项,预设多种大师级镜头模式。在限免期间&…

在复杂的服务器环境中,如何优化 Shell 脚本的性能,以减少系统资源消耗并提高执行效率?

以下是一些优化 Shell 脚本性能的建议: 减少系统调用:尽量减少脚本中的系统调用次数,因为系统调用是比较耗时的操作。可以通过将多个命令放在一个子 shell 中或使用管道来减少系统调用次数。 避免过多的 IO 操作:尽量减少文件读写…

CUTS 多粒度分割 + 局部图像块对比学习: 无需大量标注数据 + 多尺度病变识别 + 解决医学图像不同仪器成像差异

CUTS 多粒度分割 局部图像块对比学习: 无需大量标注数据 多尺度病变识别 解决医学图像不同仪器成像差异 提出背景CUTS 框架(A) 总览(B) 像素中心的图像块嵌入(C) 图像内对比图像块选择(D) 扩散凝结粗粒化(E) 多粒度分割 解法拆解子解法1:多粒度分割子…

应用层协议原理——因特网提供的运输服务

我们已经考虑了计算机网络能够一般性地提供的运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP。当软件开发者为因特网创建一个新的应用时,首先要做出的决定是&…

我是售前工程师转大模型了,不装了我摊牌了

有无售前工程师的朋友,心里的苦谁懂呀,售前工程师是项目开发人员与业务销售人员的桥梁,在业务销售人员眼中,他们是技术人员,在项目实施中的开发人员眼中,他们是专注技术的销售人员,在用户眼中&a…

本人瞎说--分形与混沌--中医为什么是准的

文章目录 序分形与混沌中医的来源我为什么更爱中医现代医学仍然落后与无知,很多病根本就治不好病由心生 序 本人不是中医专业,也不是医生,也不会看病,我的观点都是来自于网上学习及思考。不喜欢的随便,但是还请您多想…