最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

你想在代碼里面兼容這兩種寫法,于是你可能會這樣寫代碼:

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

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

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

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

我們來寫一段代碼:

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)

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

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

我們使用 singledispatch 裝飾一個函數(shù),那么這個函數(shù)就是我們將會調用的函數(shù)。

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

被注冊的函數(shù)的第一個參數(shù),通過類型標注來確定它應該使用什么類型。當我們調用我們定義的函數(shù)是,如果參數(shù)類型符合某個被注冊的函數(shù),那么就會執(zhí)行這個被注冊的函數(shù)。如果參數(shù)類型不滿足任何一個被注冊的函數(shù),那么就會執(zhí)行我們的原函數(shù)。

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

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ù)的不同類型會被重載。后面的參數(shù)的類型變化會被自動忽略。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Django配置文件代碼說明

    Django配置文件代碼說明

    在本篇文章里小編給大家整理了關于Django配置文件代碼說明知識點,有需要的朋友們學習下。
    2019-12-12
  • 如何基于Python實現(xiàn)word文檔重新排版

    如何基于Python實現(xiàn)word文檔重新排版

    這篇文章主要介紹了如何基于Python實現(xiàn)word文檔重新排版,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • PyCharm無法引用自身項目解決方式

    PyCharm無法引用自身項目解決方式

    今天小編就為大家分享一篇PyCharm無法引用自身項目解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 詳解Django中異步任務之django-celery

    詳解Django中異步任務之django-celery

    這篇文章主要介紹了詳解Django中異步任務之django-celery,本文通過場景分析實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Win10+GPU版Pytorch1.1安裝的安裝步驟

    Win10+GPU版Pytorch1.1安裝的安裝步驟

    這篇文章主要介紹了Win10+GPU版Pytorch1.1安裝的安裝步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 解決Django transaction進行事務管理踩過的坑

    解決Django transaction進行事務管理踩過的坑

    這篇文章主要介紹了解決Django transaction進行事務管理踩過的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 利用Python將彩色圖像轉為灰度圖像的兩種方法

    利用Python將彩色圖像轉為灰度圖像的兩種方法

    這篇文章主要給大家介紹了關于利用Python將彩色圖像轉為灰度圖像的兩種方法,以及python 批量將圖片轉為灰度圖的方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • Eclipse配置python默認頭過程圖解

    Eclipse配置python默認頭過程圖解

    這篇文章主要介紹了Eclipse配置python默認頭過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • python實現(xiàn)自動發(fā)送報警監(jiān)控郵件

    python實現(xiàn)自動發(fā)送報警監(jiān)控郵件

    這篇文章主要為大家詳細介紹了python實現(xiàn)自動發(fā)送報警監(jiān)控郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python圖像文字識別詳解(附實戰(zhàn)代碼)

    Python圖像文字識別詳解(附實戰(zhàn)代碼)

    這篇文章主要給大家介紹了關于Python圖像文字識別的相關資料,本文介紹使用python進行圖像的文字識別,將圖像中的文字提取出來,可以幫助我們完成很多有趣的事情,需要的朋友可以參考下
    2024-02-02

最新評論

台江县| 阜康市| 潞西市| 如皋市| 舟曲县| 景谷| 类乌齐县| 东台市| 祁门县| 哈尔滨市| 吉林市| 高尔夫| 沁源县| 舞钢市| 东台市| 二手房| 四川省| 上犹县| 长阳| 云南省| 若尔盖县| 耒阳市| 磐石市| 新竹市| 天峨县| 茶陵县| 丰城市| 宜兰市| 蚌埠市| 大宁县| 竹溪县| 麦盖提县| 茶陵县| 涿州市| 华阴市| 湖北省| 久治县| 调兵山市| 郧西县| 马龙县| 定州市|