亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼

 更新時(shí)間:2019年12月12日 10:19:04   作者:青南  
這篇文章主要介紹了在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

假設(shè)你有一個(gè)函數(shù)connect,它有一個(gè)參數(shù)address,這個(gè)參數(shù)可能是一個(gè)字符串,也可能是一個(gè)元組。例如:

connect('123.45.32.18:8080')
connect(('123.45.32.18', 8080))

你想在代碼里面兼容這兩種寫(xiě)法,于是你可能會(huì)這樣寫(xiě)代碼:

def connect(address):
 if isinstance(address, str):
 ip, port = address.split(':')
 elif isinstance(address, tuple):
 ip, port = address
 else:
 print('地址格式不正確')

這種寫(xiě)法簡(jiǎn)單直接,但是如果參數(shù)的類型更多,那么你就需要寫(xiě)很長(zhǎng)的 if-elif-elif-...-else 。代碼看起來(lái)就非常不美觀。

學(xué)習(xí)過(guò) Java 的同學(xué),應(yīng)該對(duì)函數(shù)重載比較熟悉,可以定義幾個(gè)名字相同的函數(shù),但是他們的參數(shù)類型或者數(shù)量不同,從而實(shí)現(xiàn)不同的代碼邏輯。

在 Python 里面,參數(shù)的數(shù)量不同可以使用默認(rèn)參數(shù)來(lái)解決,不需要定義多個(gè)函數(shù)。那如果參數(shù)類型不同就實(shí)現(xiàn)不同的邏輯,除了上面的 if-else 外,我們還可以使用 functools 模塊里面的 singledispatch 裝飾器實(shí)現(xiàn)函數(shù)重載。

我們來(lái)寫(xiě)一段代碼:

from functools import singledispatch

@singledispatch
def connect(address):
 print(f' 傳輸參數(shù)類型為:{type(address)},不是有效類型')

@connect.register
def _(address: str):
 ip, port = address.split(':')
 print(f'參數(shù)為字符串,IP是:{ip}, 端口是:{port}')

@connect.register
def _(address: tuple):
 ip, port = address
 print(f'參數(shù)為元組,IP是:{ip}, 端口是:{port}')

connect('123.45.32.18:8080')
connect(('123.45.32.18', 8080))
connect(123)

我們運(yùn)行一下這段代碼,大家看看根據(jù)參數(shù)的不同,有什么樣的不同效果:

可以看到,我們調(diào)用的函數(shù),始終都是 connect ,但是由于傳入?yún)?shù)的類型不同,它運(yùn)行的結(jié)果也不一樣。

我們使用 singledispatch 裝飾一個(gè)函數(shù),那么這個(gè)函數(shù)就是我們將會(huì)調(diào)用的函數(shù)。

這個(gè)函數(shù)在傳入?yún)?shù)不同時(shí)的具體實(shí)現(xiàn),通過(guò)下面注冊(cè)的函數(shù)來(lái)實(shí)現(xiàn)。注冊(cè)的時(shí)候使用 @我們定義的函數(shù)名.register 來(lái)注冊(cè)。被注冊(cè)的函數(shù)名叫什么無(wú)關(guān)緊要,所以這里我都直接使用下劃線代替。

被注冊(cè)的函數(shù)的第一個(gè)參數(shù),通過(guò)類型標(biāo)注來(lái)確定它應(yīng)該使用什么類型。當(dāng)我們調(diào)用我們定義的函數(shù)是,如果參數(shù)類型符合某個(gè)被注冊(cè)的函數(shù),那么就會(huì)執(zhí)行這個(gè)被注冊(cè)的函數(shù)。如果參數(shù)類型不滿足任何一個(gè)被注冊(cè)的函數(shù),那么就會(huì)執(zhí)行我們的原函數(shù)。

使用類型標(biāo)注來(lái)指定參數(shù)類型是從 Python 3.7才引入的新特性。在 Python 3.6或之前的版本,我們需要通過(guò) @我們定義的函數(shù)名.register(類型) 來(lái)指定類型,例如:

from functools import singledispatch

@singledispatch
def connect(address):
 print(f' 傳輸參數(shù)類型為:{type(address)},不是有效類型')

@connect.register(str)
def _(address):
 ip, port = address.split(':')
 print(f'參數(shù)為字符串,IP是:{ip}, 端口是:{port}')

@connect.register(tuple)
def _(address):
 ip, port = address
 print(f'參數(shù)為元組,IP是:{ip}, 端口是:{port}')

同時(shí),還有一個(gè)需要注意的點(diǎn),就是只有第一個(gè)參數(shù)的不同類型會(huì)被重載。后面的參數(shù)的類型變化會(huì)被自動(dòng)忽略。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Matplotlib實(shí)現(xiàn)各種條形圖繪制

    Matplotlib實(shí)現(xiàn)各種條形圖繪制

    這篇文章主要介紹了Matplotlib實(shí)現(xiàn)各種條形圖繪制,文章通過(guò)利用 plt.bar 方法實(shí)現(xiàn)各種條形圖繪制,內(nèi)容詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • Python魔法方法詳解

    Python魔法方法詳解

    今天小編就為大家分享一篇關(guān)于Python魔法方法詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 詳解Python中import機(jī)制

    詳解Python中import機(jī)制

    這篇文章主要介紹了Python中import機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python向MySQL批量插數(shù)據(jù)的實(shí)例講解

    Python向MySQL批量插數(shù)據(jù)的實(shí)例講解

    下面小編就為大家分享一篇Python向MySQL批量插數(shù)據(jù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Python3實(shí)現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉(zhuǎn)整數(shù)算法示例

    Python3實(shí)現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉(zhuǎn)整數(shù)算法示例

    這篇文章主要介紹了Python3實(shí)現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉(zhuǎn)整數(shù)算法,涉及Python數(shù)值運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Pytest使用logging模塊寫(xiě)日志的實(shí)例詳解

    Pytest使用logging模塊寫(xiě)日志的實(shí)例詳解

    logging是python語(yǔ)言中的一個(gè)日志模塊,專門(mén)用來(lái)寫(xiě)日志的,日志級(jí)別通常分為debug、info、warning、error、critical幾個(gè)級(jí)別,一般情況下,默認(rèn)的日志級(jí)別為warning,在調(diào)試或者測(cè)試階段,下面就快速體驗(yàn)一下logging模塊寫(xiě)日志的用法,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • python判斷字符串的前兩個(gè)字母是否是"id"的示例代碼

    python判斷字符串的前兩個(gè)字母是否是"id"的示例代碼

    這篇文章主要介紹了python判斷字符串的前兩個(gè)字母是否是”id",使用 Python 的字符串切片來(lái)判斷一個(gè)字符串的前兩個(gè)字母是否是 "id",本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • python實(shí)現(xiàn)windows壁紙定期更換功能

    python實(shí)現(xiàn)windows壁紙定期更換功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)windows壁紙定期更換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式

    python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式

    這篇文章主要介紹了python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實(shí)現(xiàn)代碼

    Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python3連接MySQL(pymysql)模擬轉(zhuǎn)賬實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評(píng)論