这里的泛型函数是指由一组为不同类型参数执行相似操作的函数组成的函数,具体调用哪一个函数的实现取决于分发算法和参数类型。Python单分发器是实现泛型函数的一种形式,由一个单一参数来决定选择和调用哪个函数。下面的代码演示了单分发器泛型函数的有关用法:

from functools import singledispatch

@singledispatch

def fun(arg, verbose=False):

'''如果没有合适的函数,就调用这个函数'''

if verbose:

print('Let me just say,', end=' ')

print(arg)

#把register当做修饰器使用,为不同类型参数分别创建不同的实现

#使用下划线表示不关心函数的具体名字

@fun.register(int)

def _(arg, verbose=False):

'''如果第一个参数的类型是int,就调用这个函数'''

if verbose:

print('Strength in numbers, eh?', end=' ')

print(arg)

#也可以为函数起个名字

@fun.register(float)

def fun_num(arg, verbose=False):

'''如果第一个参数的类型是float,就调用这个函数'''

if verbose:

print('Half of your number is:', end=' ')

print(arg/2)

@fun.register(list)

@fun.register(tuple)

def _(arg, verbose=False):

'''如果第一个参数的类型是list或tuple,就调用这个函数'''

if verbose:

print('Enumerate this:')

for i, v in enumerate(arg):

print(i, v)

#自定义类

class Scores:

def __init__(self, *score):

self.score = list(score)

#为自定义类型创建泛型函数

@fun.register(Scores)

def _(arg, verbose=False):

if verbose:

print('The scores are:')

for sc in arg.score:

print(sc, end=' ')

#如果第一个参数是None的类型,就调用这个函数

def doNothing(arg, verbose=False):

print('Nothing to do.')

#可以把register()当做函数使用来注册指定类型

fun.register(type(None), doNothing)

#调用原始函数

fun('Hello world.')

#调用针对整型参数的函数

fun(666, True)

#调用针对实型参数的函数

fun(6.66)

#调用针对列表和元组参数的函数

fun(list(range(5, 10)))

fun(tuple(range(10, 15)))

#调用针对None类型参数的函数doNothing()

fun(None)

#调用原始函数

fun({1,2,3},True)

#调用针对自定义类型Scores参数的函数

fun(Scores(1, 2, 3, 4, 5))

Python泛型函数与单分发器相关推荐

  1. python log函数_python要点-装饰器

    大家有没有碰到过这种需求,扩展公司的历史项目,对功能进行扩展?拿到历史项目看源码的时候是不是头特别大,难上加难的是还要对其进行修改!!!今天要讲的是python中的重要功能-装饰器,其对满足前述的实现 ...

  2. python: 从函数了解到装饰器

    Table of Contents 1. 简单了解函数 1.1. 函数是什么 1.2. 函数的好处 1.3. 函数和过程的区别 1.3.1. python的函数和过程 1.3.2. common li ...

  3. python 成员函数 分发器_python实现基于ssh的分发器

    以下程序均来自<Python.UNIX和Linux系统管理指南> 首先要设置ssh无密码登陆 操作步骤: 1. 生成ssh密钥 [root@os1 ~]# ssh-keygen -t rs ...

  4. python 成员函数 泛型函数_【一点资讯】白学这么多年 Python?连泛型函数都不会写? www.yidianzixun.com...

    泛型,如果你尝过java,应该对他不陌生吧.但你可能不知道在 Python 中(3.4+ ),也可以实现 简单的泛型函数.在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式, ...

  5. Python 没有函数重载?如何用装饰器实现函数重载?

    摘要:Python 不支持函数重载.当我们定义了多个同名的函数时,后面的函数总是会覆盖前面的函数,因此,在一个命名空间中,每个函数名仅会有一个登记项(entry). 本文分享自华为云社区<为什么 ...

  6. python 正则化表达式和泛型函数的使用及异常

    目录 一.正则表达式 3.1匹配函数 3.2检索和替换 3.3正则表达式对象 二.常用方法使用 三.泛型函数的使用 四.上下文管理器 五.装饰器 六.异常 6.1抛出和捕获异常 一.正则表达式 正则表 ...

  7. (十三)事件分发器——event()函数,事件过滤

    事件分发器--event()函数 事件过滤 事件进入窗口之前被拦截 eventFilter #include "mywidget.h" #include "ui_mywi ...

  8. python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...

    在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...

  9. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

最新文章

  1. 配置Android开发环境(fedora)
  2. applet打包的MANIFEST.MF配置
  3. ASP.NET MVC2 Web项目中公用类库的问题
  4. 腾讯财付通漏洞遭***利用 威胁QQ彩钻等付费用户
  5. 今晚直播 | 清华大学​高天宇:对比学习及其在NLP中的应用
  6. 如何安装使用PHP MyAdmin
  7. python调用dll函数_关于从加载的DLL调用函数的Python基本问题
  8. BeginPaint和GetDC有什么区别?【转】
  9. LINQ to SQL VS LINQ to Entities
  10. 网易2016游戏技术岗在线编程题(一)
  11. 没有找到 AUTOBACKUP
  12. 2021年中国生育保险参保人数及待遇情况分析:广东省参保人数、享受生育保险待遇人次均居全国首位[图]
  13. Git和SVN的区别(以后别再问我了)
  14. 计算机专业研究生核心能力培养(2)——如何更好的写代码
  15. android 谷歌地图围栏,基于OpenLayers实现地理围栏 谷歌百度高德地图都可以
  16. 芯片、二代测序的差别及GEO数据库界面
  17. 90% 都会的 ES6 简化代码技巧,你用过哪些?
  18. PS网页设计教程XVI——在PS中创建一个摩登实验室风格的网页设计
  19. 蓝桥杯 BFS 迷宫寻宝
  20. 笔记本连接并获取 Bizhub C221 扫描件

热门文章

  1. 2台电脑一根网线传文件_用1根网线直连2台电脑,能干嘛?
  2. python编译为机器码_通过 GraalVM 将 Java 程序编译成本地机器码!
  3. 后台给前台传值 php,前后台传值的几种方式(html,js,php)
  4. wegame地下城不显示服务器,在电脑端wegame看不到旭旭宝宝?来吧我教你! - 地下城与勇士掌游宝...
  5. java三个整型变量_初值自定义.if按由小到大的顺序输出这三个数_C语言实现3个数从小到大排序/输出的方法示例...
  6. linux wamp,ubuntu wamp server ..................
  7. beatsx三闪红灯是什么意思_飞机座椅上写的quot;taxiquot; 什么意思?出租车?
  8. 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
  9. Intelli IDEA 快捷键操作,咱来点不一样的
  10. WebLogic在Linux环境下安装