使用python實現泛型函式

2021-10-10 20:37:46 字數 3144 閱讀 8523

簡易理解:泛型函式就是你定義函式的時候, 能接收萬能型別, 在呼叫時, 會根據傳入值本身的型別進行區分處理, 達到某些效果, 好處是**復用率高, 減少**冗餘, 對物件導向語言中泛型函式概念非常常用.

接下來使用到的py庫functools中的singledispatch模組

使用方法:

在需要進行泛型的函式上加上裝飾器即可

from functools import singledispatch

@singledispatch

defadd

(obj)

:return obj

1singledispatch: 標記處理函式傳值型別

2 register(型別): 為傳值判斷型別後輸出結果

3 後續使用無需寫函式名, 只要有register(型別裝飾器)即可呼叫

4 定義需要判斷的型別int str tuple dict list set 根據自己需求

使用:函式中實現型別判斷

from functools import singledispatch

@singledispatch

defadd

(obj)

:return obj

int型別

@add.register(

int)

def_

(add)

:print

("int型別"

)@add.register(

str)

def_

(add)

:print

("str型別"

)

@add.register(

list

)def

_(add)

:print

("list型別"

)

@add.register(

tuple

)def

_(add)

:print

("tuple型別"

)

@add.register(

dict

)def

_(add)

:print

("dict型別"

)

@add.register(

set)

def_

(add)

:print

("set型別"

)

add([1

,2,3

])

輸出結果:

list型別

根據輸入的內容進行判斷型別輸出

物件中使用

from functools import singledispatch

class

type

: @singledispatch

defadd(obj)

:return obj

@add.register(

int)

def_

(add)

:print

("int型別"

) @add.register(

str)

def_

(add)

:print

("str"

) @add.register(

list

)def

_(add)

:print

("list型別"

) @add.register(

tuple

)def

_(add)

:print

("tuple型別"

) @add.register(

dict

)def

_(add)

:print

("dict型別"

) @add.register(

set)

def_

(add)

:print

("set型別"

)type.add([1

,2,3

])輸出結果:

list型別

不呼叫singledispatch模組實現泛型函式

這裡需要實現乙個型別拼接操作, 如下**

在此之前需要先定義乙個裝飾器, 來判斷兩個型別是否相同, 如果不同則不作後續判斷, 節省資源消耗

def

check_type

(func)

:def

(*args,

**kwargs)

: args1, args2 = args[:2

]iftype

(args1)

!=type

(args2)

:return

"兩種型別不一致, 不能做拼接"

return func(

*args,

**kwargs)

@check_type

defadd

(obj1, obj2):if

isinstance

(obj1,

list):

obj1 += obj2

return obj1

ifisinstance

(obj1,

str)

: obj1 += obj2

return obj1

ifisinstance

(obj1,

tuple):

obj1 += obj2

return obj1

ifisinstance

(obj1,

dict):

obj1 += obj2

return obj1

print

(add([1

,2,3

],[1

,2,3

]))結果與上方一樣, 按需選擇

例子很簡單, 最後多用於tcp/ip接收判斷使用

c 泛型函式的使用

以下函式的作用為 遍歷容器,改變容器內所有t型別控制項的文字顏色 遍歷fathercontrol內所有t型別控制項,改變字型顏色 要改變字型顏色的型別 要遍歷的控制項 改變的顏色 private void getcontrols1 control fathercontrol,color col wh...

泛型函式Func

泛型函式,即可以接受任何型別的通用函式 有where約束除外 例如 呼叫getcachedata,那第二個委託引數就是func,這個函式返回值也是int 呼叫getcachedata,那第二個委託引數就是func,這個函式返回值是string public static intstrtoint st...

c語言實現泛型函式

liner search include include void lsearch void key,void base,int n,int elemsize,int compfunc void void return null intintcomp void a,void b void main ...