网站开发公司 商业计划书,营销策划的流程,淘宝开店培训,wordpress文章写好看泛型#xff0c;如果你尝过java#xff0c;应该对他不陌生吧。但你可能不知道在 Python 中(3.4 )#xff0c;也可以实现 简单的泛型函数。在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式#xff0c;官方名称 是single-dispatch。你或许听不懂…泛型如果你尝过java应该对他不陌生吧。但你可能不知道在 Python 中(3.4 )也可以实现 简单的泛型函数。在Python中只能实现基于单个(第一个)参数的数据类型来选择具体的实现方式官方名称 是single-dispatch。你或许听不懂说人话就是可以实现第一个参数的数据类型不同其调用的函数也就不同。它使用方法极其简单只要被singledispatch装饰的函数就是一个single-dispatch的泛函数(generic functions)。单分派根据一个参数的类型以不同方式执行相同的操作的行为。多分派可根据多个参数的类型选择专门的函数的行为。泛函数多个函数绑在一起组合成一个泛函数。这边举个简单的例子。from functools import singledispatchsingledispatchdef age(obj):print(请传入合法类型的参数)age.register(int)def _(age):print(我已经{}岁了。.format(age))age.register(str)def _(age):print(I am {} years old..format(age))age(23) # intage(twenty three) # strage # list执行结果我已经23岁了。I am twenty three years old.请传入合法类型的参数说起泛型其实在 Python 本身的一些内建函数中并不少见比如pprint等你可能会问它有什么用呢实际上真没什么用你不用它或者不认识它也完全不影响你编码。我这里举个例子你可以感受一下。大家都知道Python 中有许许多的数据类型比如 strlist dict tuple 等不同数据类型的拼接方式各不相同所以我这里我写了一个通用的函数可以根据对应的数据类型对选择对应的拼接方式拼接而且不同数据类型我还应该提示无法拼接。以下是简单的实现。def check_type(func):def wrapper(*args):arg1, arg2 argsif type(arg1) ! type(arg2):return 【错误】参数类型不同无法拼接!!return func(*args)return wrappersingledispatchdef add(obj, new_obj):raise TypeErroradd.register(str)check_typedef _(obj, new_obj):obj new_objreturn objadd.register(list)check_typedef _(obj, new_obj):obj.extend(new_obj)return objadd.register(dict)check_typedef _(obj, new_obj):obj.update(new_obj)return objadd.register(tuple)check_typedef _(obj, new_obj):return (*obj, *new_obj)print(add(hello,, world))print(add)print(add({name: wangbm}, {age:25}))print(add((apple, huawei), (vivo, oppo)))# list 和 字符串 无法拼接print(add(, 4,5,6))输出结果如下hello, world{name: wangbm, age: 25}(apple, huawei, vivo, oppo)【错误】参数类型不同无法拼接!!如果不使用singledispatch 的话你可能会写出这样的代码。def check_type(func):def wrapper(*args):arg1, arg2 argsif type(arg1) ! type(arg2):return 【错误】参数类型不同无法拼接!!return func(*args)return wrappercheck_typedef add(obj, new_obj):if isinstance(obj, str) :obj new_objreturn objif isinstance(obj, list) :obj.extend(new_obj)return objif isinstance(obj, dict) :obj.update(new_obj)return objif isinstance(obj, tuple) :return (*obj, *new_obj)print(add(hello,, world))print(add)print(add({name: wangbm}, {age:25}))print(add((apple, huawei), (vivo, oppo)))# list 和 字符串 无法拼接print(add(, 4,5,6))输出如下推荐下我本人原创的 《PyCharm 中文指南》电子书内含大量(300张)的图解制作之精良值得每个 Python 工程师点个收藏。