功能:
解釋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)