女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python偏函數(shù)和泛型函數(shù)詳解

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

python偏函數(shù)

假如一個函數(shù)定義了多個位置參數(shù),那你每次調(diào)用時,都需要把這些個參數(shù)一個一個地傳遞進(jìn)去。

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

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

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

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

后來我發(fā)現(xiàn),我很多時候都是計算平方值,很多會去計算三次方,四次方。

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

答案是,有。可以使用 偏函數(shù)

偏函數(shù)(Partial Function),可以將某個函數(shù)的常用參數(shù)進(jìn)行固定,避免每次調(diào)用時都要指定。

使用偏函數(shù),需要導(dǎo)入 functools.partial ,然后利用它創(chuàng)建一個新函數(shù),新函數(shù)的 n 固定等2。

具體使用請看下面的示例

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

python泛型函數(shù)

根據(jù)傳入?yún)?shù)類型的不同而調(diào)用不同的函數(shù)邏輯體,這種實現(xiàn)我們稱之為泛型。在 Python 中叫做 singledispatch

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

單分派:根據(jù)一個參數(shù)的類型,以不同方式執(zhí)行相同的操作的行為。

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

泛函數(shù):多個函數(shù)綁在一起組合成一個泛函數(shù)。

這邊舉個簡單的例子。

from functools import singledispatch

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

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

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


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

執(zhí)行結(jié)果

我已經(jīng)23歲了。
I am twenty three years old.
請傳入合法類型的參數(shù)!

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

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

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

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

def check_type(func):
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【錯誤】:參數(shù)類型不同,無法拼接!!'
        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'))

輸出結(jié)果如下

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

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

def check_type(func):
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【錯誤】:參數(shù)類型不同,無法拼接!!'
        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')
【錯誤】:參數(shù)類型不同,無法拼接!!

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4367

    瀏覽量

    64104
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4823

    瀏覽量

    86109
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的一個關(guān)鍵特性,通過該函數(shù),用戶可以增強(qiáng)對任務(wù)管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?248次閱讀

    西門子TIA Portal中函數(shù)FC和函數(shù)塊FB的相互轉(zhuǎn)換

    描述 本文將介紹在西門子 TIA Portal 中使用 Add-In 插件實現(xiàn)函數(shù) FC 和函數(shù)塊 FB 的相互轉(zhuǎn)換的方法和步驟。 第1步: 添加 PLC 設(shè)備。 選擇西門子 CPU 1214C
    的頭像 發(fā)表于 01-15 10:07 ?1594次閱讀
    西門子TIA Portal中<b class='flag-5'>函數(shù)</b>FC和<b class='flag-5'>函數(shù)</b>塊FB的相互轉(zhuǎn)換

    如何優(yōu)化SUMIF函數(shù)的效率

    在Excel中, SUMIF 函數(shù)是一個非常有用的工具,它可以根據(jù)指定的條件對數(shù)據(jù)進(jìn)行求和。然而,在處理大量數(shù)據(jù)時, SUMIF 函數(shù)可能會變得效率低下。以下是一些優(yōu)化 SUMIF 函數(shù)效率的方法
    的頭像 發(fā)表于 11-11 09:20 ?1037次閱讀

    SUMIF函數(shù)對比VLOOKUP的優(yōu)勢

    在Excel中,數(shù)據(jù)管理和分析是日常工作中不可或缺的一部分。SUMIF函數(shù)和VLOOKUP函數(shù)是兩個非常受歡迎的函數(shù),它們可以幫助用戶快速地處理和分析數(shù)據(jù)。盡管它們都可以用于查找和匯總數(shù)據(jù),但它們在
    的頭像 發(fā)表于 11-11 09:16 ?1032次閱讀

    SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別

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

    SUMIF函數(shù)使用教程

    SUMIF函數(shù)是Excel中非常實用的函數(shù)之一,能夠根據(jù)指定條件對數(shù)據(jù)進(jìn)行篩選和求和操作。以下是對SUMIF函數(shù)使用方法的詳細(xì)教程: 一、基本語法 SUMIF函數(shù)的基本語法為: =SU
    的頭像 發(fā)表于 10-30 09:50 ?1685次閱讀

    Python常用函數(shù)大全

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

    RTOS中鉤子函數(shù)的用途及用法

    在很多操作系統(tǒng)中,都存在這樣一類API函數(shù)接口:HOOK函數(shù)(也叫鉤子函數(shù))。
    的頭像 發(fā)表于 10-23 16:25 ?681次閱讀
    RTOS中鉤子<b class='flag-5'>函數(shù)</b>的用途及用法

    如何由系統(tǒng)函數(shù)求頻率響應(yīng)

    頻率響應(yīng)函數(shù)表征了測試系統(tǒng)對給定頻率下的穩(wěn)態(tài)輸出與輸入的關(guān)系,可以通過系統(tǒng)函數(shù)(或稱為傳遞函數(shù))來求解。以下是由系統(tǒng)函數(shù)求頻率響應(yīng)的步驟: 一、理解系統(tǒng)
    的頭像 發(fā)表于 10-18 09:32 ?3051次閱讀

    什么叫系統(tǒng)的頻率響應(yīng)函數(shù)?它和傳遞函數(shù)有何關(guān)系

    系統(tǒng)的頻率響應(yīng)函數(shù)(Frequency Response Function, FRF)是描述線性時不變(Linear Time-Invariant, LTI)系統(tǒng)在不同頻率下輸入和輸出之間關(guān)系的數(shù)學(xué)
    的頭像 發(fā)表于 10-18 09:29 ?3973次閱讀

    labview常用的基本函數(shù)

    電子發(fā)燒友網(wǎng)站提供《labview常用的基本函數(shù).pdf》資料免費下載
    發(fā)表于 10-15 17:29 ?7次下載

    1653系列函數(shù)任意波形發(fā)生器

    1653系列函數(shù)任意波形發(fā)生器 XLT 簡述 1653系列經(jīng)濟(jì)型函數(shù)任意波形發(fā)生器,通過多通道、深存儲、高質(zhì)量的產(chǎn)品設(shè)計有效解決教育科研、工業(yè)測試、醫(yī)療電子等場景中用戶高性價比復(fù)雜波形信號生成
    的頭像 發(fā)表于 10-15 17:13 ?486次閱讀

    面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

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

    python函數(shù)的萬能參數(shù)

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

    卷積神經(jīng)網(wǎng)絡(luò)激活函數(shù)的作用

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNNs)是深度學(xué)習(xí)中一種重要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),廣泛應(yīng)用于圖像識別、語音識別、自然語言處理等領(lǐng)域。在卷積神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)
    的頭像 發(fā)表于 07-03 09:18 ?1701次閱讀