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)

 

 

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