python 小知识 -python 泛函数
java 中泛型(generic)泛型 被用于支持根据不同类型输入参数的函数或者类,比如 Class 或者 List , 在调用实例化是才传入实际类型的 T。
python 中的标准模块 functools 的装饰器 singledispatch 也提供了类似的功能,通过 singledispatch 装饰器可以把不同函数变成支持泛型的泛函数,可以支持同一个函数,支持不同的类型输入。
我们通过例子来一探 singledispatch 的究竟。
复制代码
由于 python 是动态语言,不支持重载,不会根据不同类型来选择调用同一个名字不同类型参数的函数。如上面例子所示,只能显式的声明两个函数 display_int 和 disply_str。如果有很多类型,则需要大量的函数和函数名。
一种解决办法是一个函数,在函数里做类型判断。同样的问题,如果有很多类型,写长长的 if else 串。
复制代码
另外一种解决方案就是 singledispatch, 可用 singledispatch 去装饰一个默认类型的函数,然后需要接收不同类型时,通过该函数名去注册.register(int)
复制代码
版权声明: 本文为 InfoQ 作者【AIWeker-人工智能微客】的原创文章。
原文链接:【http://xie.infoq.cn/article/830c94479fdc1c9f4348c421d】。文章转载请联系作者。
评论