色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python偏函數和泛型函數詳解

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-03 16:43 ? 次閱讀

python偏函數

假如一個函數定義了多個位置參數,那你每次調用時,都需要把這些個參數一個一個地傳遞進去。

比如下面這個函數,是用來計算 x的n次方 的。

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

那我每次計算 x 的 n 次方,都要傳遞兩個參數

>>> power(2, 2)
4
>>> power(3, 2)
9

后來我發現,我很多時候都是計算平方值,很多會去計算三次方,四次方。

那有什么辦法可以偷個懶嗎?

答案是,有。可以使用 偏函數

偏函數(Partial Function),可以將某個函數的常用參數進行固定,避免每次調用時都要指定。

使用偏函數,需要導入 functools.partial ,然后利用它創建一個新函數,新函數的 n 固定等2。

具體使用請看下面的示例

>>> from functools import partial
>>> power_2=partial(power, n=2)
>>> power_2(2)
4
>>> power_2(3)
9

python泛型函數

根據傳入參數類型的不同而調用不同的函數邏輯體,這種實現我們稱之為泛型。在 Python 中叫做 singledispatch

它使用方法極其簡單,只要被singledispatch 裝飾的函數,就是一個single-dispatch 的泛函數(generic functions)。

單分派:根據一個參數的類型,以不同方式執行相同的操作的行為。

多分派:可根據多個參數的類型選擇專門的函數的行為。

泛函數:多個函數綁在一起組合成一個泛函數。

這邊舉個簡單的例子。

from functools import singledispatch

@singledispatch
def age(obj):
    print('請傳入合法類型的參數!')

@age.register(int)
def _(age):
    print('我已經{}歲了。'.format(age))

@age.register(str)
def _(age):
    print('I am {} years old.'.format(age))


age(23)  # int
age('twenty three')  # str
age(['23'])  # list

執行結果

我已經23歲了。
I am twenty three years old.
請傳入合法類型的參數!

說起泛型,其實在 Python 本身的一些內建函數中并不少見,比如 len()iter()copy.copy()pprint()

你可能會問,它有什么用呢?實際上真沒什么用,你不用它或者不認識它也完全不影響你編碼。

我這里舉個例子,你可以感受一下。

大家都知道,Python 中有許許多的數據類型,比如 str,list, dict, tuple 等,不同數據類型的拼接方式各不相同,所以我這里我寫了一個通用的函數,可以根據對應的數據類型對選擇對應的拼接方式拼接,而且不同數據類型我還應該提示無法拼接。以下是簡單的實現。

def check_type(func):
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【錯誤】:參數類型不同,無法拼接!!'
        return func(*args)
    return wrapper


@singledispatch
def add(obj, new_obj):
    raise TypeError

@add.register(str)
@check_type
def _(obj, new_obj):
    obj += new_obj
    return obj


@add.register(list)
@check_type
def _(obj, new_obj):
    obj.extend(new_obj)
    return obj

@add.register(dict)
@check_type
def _(obj, new_obj):
    obj.update(new_obj)
    return obj

@add.register(tuple)
@check_type
def _(obj, new_obj):
    return (*obj, *new_obj)

print(add('hello',', world'))
print(add([1,2,3], [4,5,6]))
print(add({'name': 'wangbm'}, {'age':25}))
print(add(('apple', 'huawei'), ('vivo', 'oppo')))

# list 和 字符串 無法拼接
print(add([1,2,3], '4,5,6'))

輸出結果如下

hello, world
[1, 2, 3, 4, 5, 6]
{'name': 'wangbm', 'age': 25}
('apple', 'huawei', 'vivo', 'oppo')
【錯誤】:參數類型不同,無法拼接!!

如果不使用singledispatch 的話,你可能會寫出這樣的代碼。

def check_type(func):
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【錯誤】:參數類型不同,無法拼接!!'
        return func(*args)
    return wrapper

@check_type
def add(obj, new_obj):
    if isinstance(obj, str) :
        obj += new_obj
        return obj

    if isinstance(obj, list) :
        obj.extend(new_obj)
        return obj

    if isinstance(obj, dict) :
        obj.update(new_obj)
        return obj

    if isinstance(obj, tuple) :
        return (*obj, *new_obj)

print(add('hello',', world'))
print(add([1,2,3], [4,5,6]))
print(add({'name': 'wangbm'}, {'age':25}))
print(add(('apple', 'huawei'), ('vivo', 'oppo')))

# list 和 字符串 無法拼接
print(add([1,2,3], '4,5,6'))

輸出如下

hello, world
[1, 2, 3, 4, 5, 6]
{'name': 'wangbm', 'age': 25}
('apple', 'huawei', 'vivo', 'oppo')
【錯誤】:參數類型不同,無法拼接!!

審核編輯:符乾江

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62571
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84627
收藏 人收藏

    評論

    相關推薦

    SUMIF函數與SUMIFS函數的區別

    SUMIF函數和SUMIFS函數都是Excel中用于條件求和的函數,它們可以幫助用戶根據特定的條件對數據進行求和。盡管它們的基本功能相似,但在使用場景和功能上存在一些差異。以下是對這兩個函數
    的頭像 發表于 10-30 09:51 ?1022次閱讀

    Python常用函數大全

    Python 世界里,有一些寶藏函數和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認識這些神器,讓你的開發生活瞬間輕松不少!
    的頭像 發表于 10-27 17:20 ?235次閱讀

    面試常考+1:函數指針與指針函數、數組指針與指針數組

    在嵌入式開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、指針函數函數指針指針
    的頭像 發表于 08-10 08:11 ?830次閱讀
    面試常考+1:<b class='flag-5'>函數</b>指針與指針<b class='flag-5'>函數</b>、數組指針與指針數組

    python函數的萬能參數

    我們通過一個簡單的事例來展示一下函數的萬能參數,我們先寫一個最簡單的函數
    的頭像 發表于 07-17 14:56 ?329次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>函數</b>的萬能參數

    MATLAB信號處理常用函數詳解

    MATLAB是一款功能強大的數學軟件,尤其在信號處理領域,它提供了眾多的函數和工具箱,使得信號的分析、處理、仿真變得簡單而高效。本文將詳細介紹MATLAB在信號處理中常用的函數,并通過具體示例來闡述其應用。
    的頭像 發表于 05-17 14:31 ?2118次閱讀

    C語言函數指針六大應用場景詳解

    函數指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發表于 04-23 18:19 ?882次閱讀

    回調函數(callback)是什么?回調函數的實現方法

    回調函數是一種特殊的函數,它作為參數傳遞給另一個函數,并在被調用函數執行完畢后被調用。回調函數通常用于事件處理、異步編程和處理各種操作系統和
    發表于 03-12 11:46 ?2903次閱讀

    淺談C語言中的函數定義

    如果函數要使用參數,則必須聲明接受參數值的變量。這些變量稱為函數的形式參數。 形式參數就像函數內的其他局部變量,在進入函數時被創建,退出函數
    發表于 03-11 10:09 ?375次閱讀

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數函數指針可以像一般函數一樣,用于調用函數、傳遞參數。
    的頭像 發表于 03-07 11:13 ?400次閱讀
    <b class='flag-5'>函數</b>指針與回調<b class='flag-5'>函數</b>的應用實例

    函數發生器的作用,概念要點是什么

    函數生成器是Python中非常強大的特性之一。它們允許我們以一種簡潔且高效的方式生成迭代器,從而幫助我們更好地處理大量數據或者在特定條件下生成無限數據。在本文中,我們將探討函數生成器的作用及其關鍵
    的頭像 發表于 02-23 16:01 ?534次閱讀

    output函數怎么用

    output 函數是一個通用的術語,并不特指某個具體的編程語言或軟件工具。 如果你在使用 Python 編程語言,那么可能是指 print 函數Python 中的 print
    的頭像 發表于 02-23 14:21 ?1248次閱讀

    verilog function函數的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數字電子電路的行為和結構。在 Verilog 中,函數 (Function) 是一種用于執行特定任務并返回一個值的可重用代碼塊。函數
    的頭像 發表于 02-22 15:49 ?5528次閱讀

    內聯函數定義 為什么需要內聯函數

    inline關鍵字是C99標準的型關鍵字,其作用是將函數展開,把函數的代碼復制到每一個調用處。
    的頭像 發表于 02-19 12:20 ?540次閱讀

    python中open函數的用法詳解

    python中open函數的用法詳解 Python中的open()函數用于打開文件。它接受文件名和模式作為參數,并返回一個文件對象。文件對象
    的頭像 發表于 01-30 15:31 ?2085次閱讀

    函數指針和指針函數是不是一個東西?

    函數指針的本質是指針,就跟整型指針、字符指針一樣,函數指針指向的是一個函數
    的頭像 發表于 01-03 16:35 ?526次閱讀
    <b class='flag-5'>函數</b>指針和指針<b class='flag-5'>函數</b>是不是一個東西?
    主站蜘蛛池模板: 直插下身完整的欧美版| 亚洲成年男人的天堂网 | 动漫美女被到爽了流| 东莞桑拿美女| 国产精品人妻无码久久久蜜桃| 国产区在线不卡视频观看| 激情床戏视频片段有叫声| 玖玖爱精品视频| 青娱乐极品视觉盛宴av| 午夜福利不卡片在线播放免费| 亚洲精品www久久久久久久软件| 在线a视频| 超碰免费视频在线观看| 国产精品色欲AV亚洲三区软件 | 国产高清超清在线播放| 国内国外精品影片无人区| 久久水蜜桃亚洲AV无码精品偷窥| 欧美xx69| 性按摩AAAAAAA片| 总裁呻吟双腿大开男男H| 成人免费观看国产高清| 国产中文视频| 哪灬你的鸣巴好大| 午夜日本大胆裸艺术| 在线观看中文字幕码2021不用下载| xxxxhdvideos动漫| 国产永久免费高清在线观看| 美女直播喷水| 性夜影院爽黄A爽免费动漫| 中国女人逼| 国产电影午夜成年免费视频| 久久精品影院永久网址| 日本午夜福利无码高清| 一道本av免费不卡播放| 成电影人免费网站| 久久青青草原精品国产软件| 日韩欧美 亚洲视频| 在线观看视频中文字幕| 国产成人精品永久免费视频| 老湿影院色情a| 小小水蜜桃视频高清在线观看免费 |