首页 > 其他分享 >单分派泛函数

单分派泛函数

时间:2023-07-17 16:23:02浏览次数:40  
标签:return 函数 register 分派 content singledispatch htmlize

当你的函数想根据不同的参数类型,做不同的操作的时候。python无法做重载,根据参数调用对应的签名函数。一般情况下只能if/elif/else来判断,时间久了,分支会特别多。

使用functools.singledispatch装饰器可以把整体方案拆分成多个模块。甚至可以为你无法修改的类提供专门的函数。使用@singledispatch装饰器装饰的函数会变成泛函数:根据第一个参数的类型,以不同方式执行相同操作的一组函数。

from functools import singledispatch
from collections import abc
import numbers
import html
@singledispatch # @singledispatch 标记处理 object 类型的基函数
def htmlize(obj):
	content = html.escape(repr(obj))
	return '<pre>{}</pre>'.format(content)

@htmlize.register(str) # 各个专门函数使用 @«base_function».register(«type») 装饰。
def _(text): # 专门函数的名称无关紧要;_ 是个不错的选择,简单明了。
	content = html.escape(text).replace('\n', '<br>\n')
	return '<p>{0}</p>'.format(content)

@htmlize.register(numbers.Integral) # 为每个需要特殊处理的类型注册一个函数。numbers.Integral 是int 的虚拟超类。
def _(n):
	return '<pre>{0} (0x{0:x})</pre>'.format(n)

@htmlize.register(tuple) # 可以叠放多个 register 装饰器,让同一个函数支持不同类型。
@htmlize.register(abc.MutableSequence)
def _(seq):
	inner = '</li>\n<li>'.join(htmlize(item) for item in seq)
	return '<ul>\n<li>' + inner + '</li>\n</ul>'

标签:return,函数,register,分派,content,singledispatch,htmlize
From: https://www.cnblogs.com/ZeladLink/p/17560003.html

相关文章

  • 字典,元组,元组内置方法、相关面试题 、 集合的内置方法 、字符编码 、文件操作 、函数
    字典的内置方法1.定义方式 d={'usernamne':"kevin"}#定义空字典d={}info=dict(username='kevin',age=18)#{'username':'kevin','age':18} print(info) #dic={#'name':�......
  • 文件内指针的移动 、内数据的修改 、函数(次函数非数学中的函数)(非常重要)
    文件的操作模式"""1.如果是t模式,read里面写的数字代表的是读取的字符个数2.如果是b模式,read里面写的数字代表的是读取的字节个数3.一个字节代表一个英文字符4.一个中文字符使用三个字节保存"""#withopen('a.txt','r',encoding='utf8')asf:#......
  • 凸优化5——凸函数的定义
    本节对应凌青老师9,10两课,主要讲了凸函数的四种定义及相关证明凸函数的四种等价定义-知乎(zhihu.com)ConvexOptimization——凸函数-知乎(zhihu.com)具体可参考这两篇注意,凸函数的前提是,该函数的定义域是凸集......
  • PostgreSQL 常用函数(一)
    函数(function)是一些预定义好的代码模块,可以将输入进行计算和处理,最终输出一个结果值。PostgreSQL函数可以分为两类:标量函数(scalarfunction)和聚合函数(aggregationfunction)。标量函数针对每个输入都会返回相应的结果,聚合函数针对一组输入汇总出一个结果。为了便于学习,可以将常见的......
  • mysql截取字符串函数 --九五小庞
    一、mysql截取字符串函数1、left(str,length)从左边截取length2、right(str,length)从右边截取length3、substring(str,index)当index>0从左边开始截取直到结束 当index<0从右边开始截取直到结束 当index=0返回空4、substring(str,index,len)截取str,从index开始,截取len......
  • 重构代码好方法之函数式编程
    在日常编码中,总会出现不同功能有相似之处,比如Session的连接与关闭啊,等等等等为了整理代码以获取眼睛的纯净,可以使用函数式编码步骤:重要的事说一遍第一步:定义函数式接口第二步:定义模板方法第三步:传递lambda表达式创建函数式接口@FunctionalInterfacepublicinterfaceDb......
  • uni-app http.js 请求封装(构造函数版本)
    import{getToken,removeToken}from"./auth.js"importconfigfrom'./config.js'//默认配置constDEFAULT_CONFIG={baseUrl:process.env.NODE_ENV==='development'?config.url_qa_api:config.url_online_api,//这里是自定......
  • 为什么不推荐在头文件中直接定义函数?
    为什么不推荐在头文件中直接定义函数?1.函数的分文件编写在C++中,函数的分文件编写是一种让代码结构更加清晰的方法,通常可以分为以下几个步骤:创建后缀名为.h的头文件,在头文件中写函数的声明,以及可能用到的其他头文件或命名空间创建后缀名为.cpp的源文件,在源文件中写函数的......
  • MarkDown | 分段函数写法
    Markdown分段函数写法$$函数名=\begin{cases}公式1&条件1\\公式2&条件2\\公式3&条件3\end{cases}$$其中,&表示对齐,\\用来表示换行。结果如下:例如:其Markdown语言为:$$y=\begin{cases}0&z<0\\0.5&z=0\\1&z>0\end{cases}$$......
  • NLP(四十七):损失函数
    三元组损失tripletloss设计初衷:让x与这个跟他同类的点距离更近,跟非同类的点距离更远。d是距离,m的含义是,当x与x+的距离减去x与x-,如果小于-m时,对损失函数的贡献为0,如果大于-m时,对损失的贡献大于0.含义就是:当负例太简单时,不产生损失,这个损失的目标是,挑选困难样本进行分类。......