python functools singledispatch

功能:
解释1:把一个大函数,根据函数的第一个参数的不同类型,分成不同的小函数,从而减少 一个函数的代码量,写出更加高逼格的优雅代码;
解释2:使用 @singledispatch 装饰的普通函数会变成泛函数(generic function),类似java重载机制

注意事项:
1.只能对函数的第一个参数起作用
2.其他参数的默认值 在 根据第一个参数的类型分配到不同函数中后,其参数默认值可以不同

 

# -*- coding: utf-8 -*-
"""
(C) Guangcai Ren <[email protected]>
All rights reserved
create time '2020/3/24 16:14'

Module usage:
functools.singledispatch
功能:
解释1:把一个大函数,根据函数的第一个参数的不同类型,分成不同的小函数,从而减少 一个函数的代码量,写出更加高逼格的优雅代码;
解释2:使用 @singledispatch 装饰的普通函数会变成泛函数(generic function),类似java重载机制

注意事项:
1.只能对函数的第一个参数起作用
2.其他参数的默认值 在 根据第一个参数的类型分配到不同函数中后,其参数默认值可以不同
"""

from functools import singledispatch


@singledispatch
def fun(arg, two_arg=2):
    """
    源函数,匹配此函数的机会放到最后,第二个参数默认值为2
    :param arg:
    :param two_arg:
    :return:
    """
    print(arg, type(arg), '原始arg', two_arg, type(two_arg), '原始two_arg')


@fun.register(int)
def __fun(arg: int, two_arg: int = 3):
    """
    第一个参数类型int,第二个参数 可以不填,默认值为3
    :param arg:
    :param two_arg:
    :return:
    """
    print(arg, type(arg), 'int方法', two_arg, type(two_arg), '原始two_arg')


@fun.register(float)
def __fun(arg: float, two_arg: float = 3.4):
    """
    第一个参数类型float,第二个参数 可以不填,默认值为3.4
    :param arg:
    :param two_arg:
    :return:
    """
    print(arg, type(arg), 'float方法', two_arg, type(two_arg), '原始two_arg')


x = [(1, 1.0), (1.0, 1.0), ('1', '1')]
[fun(*i) for i in x]
print('df')
fun('1')
fun(1)
fun(1.1)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章