chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

python爬蟲(chóng)知識(shí)分享 ? 來(lái)源:python爬蟲(chóng)知識(shí)分享 ? 作者:python爬蟲(chóng)知識(shí)分享 ? 2022-03-03 16:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python偏函數(shù)

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

比如下面這個(gè)函數(shù),是用來(lái)計(jì)算 x的n次方 的。

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

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

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

后來(lái)我發(fā)現(xiàn),我很多時(shí)候都是計(jì)算平方值,很多會(huì)去計(jì)算三次方,四次方。

那有什么辦法可以偷個(gè)懶嗎?

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

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

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

具體使用請(qǐng)看下面的示例

>>> 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ù)邏輯體,這種實(shí)現(xiàn)我們稱之為泛型。在 Python 中叫做 singledispatch

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

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

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

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

這邊舉個(gè)簡(jiǎn)單的例子。

from functools import singledispatch

@singledispatch
def age(obj):
    print('請(qǐng)傳入合法類型的參數(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.
請(qǐng)傳入合法類型的參數(shù)!

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

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

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

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

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

如果不使用singledispatch 的話,你可能會(huì)寫(xiě)出這樣的代碼。

def check_type(func):
    def wrapper(*args):
        arg1, arg2 = args[:2]
        if type(arg1) != type(arg2):
            return '【錯(cuò)誤】:參數(shù)類型不同,無(wú)法拼接!!'
        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 和 字符串 無(wú)法拼接
print(add([1,2,3], '4,5,6'))

輸出如下

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

審核編輯:符乾江

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

    關(guān)注

    3

    文章

    4400

    瀏覽量

    66365
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4848

    瀏覽量

    88952
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    詳解hal_entry入口函數(shù)

    當(dāng)使用RTOS時(shí),程序從main函數(shù)開(kāi)始進(jìn)行線程調(diào)度;當(dāng)沒(méi)有使用RTOS時(shí),C語(yǔ)言程序的入口函數(shù)main函數(shù)調(diào)用了hal_entry函數(shù)。由于我們新建的工程是沒(méi)有選用RTOS的,因此,
    的頭像 發(fā)表于 07-25 15:34 ?1458次閱讀

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

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

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

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

    關(guān)聯(lián)接口函數(shù)與libmodbus移植

    可以發(fā)現(xiàn),除了modbus.h包含的接口函數(shù)之外,modbus-rtu.h和modbus-tcp.h也包含了必要的接口函數(shù)。
    的頭像 發(fā)表于 12-30 15:20 ?1555次閱讀
    關(guān)聯(lián)接口<b class='flag-5'>函數(shù)</b>與libmodbus移植

    各類Modbus功能接口函數(shù)詳解

    函數(shù)對(duì)應(yīng)于功能碼01(0x01)讀取線圈/離散量輸出狀態(tài)(Read CoilStatus/DOs),其中,所讀取的值存放于參數(shù)uint8_t * dest指向的數(shù)組空間因此dest指向的空間必須足夠大,其大小至少為nb * sizeof(uint8_t)個(gè)字節(jié)。
    的頭像 發(fā)表于 12-11 17:12 ?3189次閱讀
    各類Modbus功能接口<b class='flag-5'>函數(shù)</b><b class='flag-5'>詳解</b>

    同樣是函數(shù),在C和C++中有什么區(qū)別

    同樣是函數(shù),在 C 和 C++ 中有什么區(qū)別? 第一個(gè)返回值。 C語(yǔ)言的函數(shù)可以不寫(xiě)返回值類型,編譯器會(huì)默認(rèn)為返回 int。 但是 C++ 的函數(shù),除了構(gòu)造和析構(gòu)這兩個(gè)特殊的函數(shù),必須
    的頭像 發(fā)表于 11-29 10:25 ?1146次閱讀

    常用SQL函數(shù)及其用法

    SQL(Structured Query Language)是一種用于管理和操作關(guān)系數(shù)據(jù)庫(kù)的編程語(yǔ)言。SQL 提供了豐富的函數(shù)庫(kù),用于數(shù)據(jù)檢索、數(shù)據(jù)更新、數(shù)據(jù)刪除以及數(shù)據(jù)聚合等操作。以下是一些常用
    的頭像 發(fā)表于 11-19 10:18 ?1976次閱讀

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

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

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

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

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

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

    SUMIF函數(shù)使用教程

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

    Python常用函數(shù)大全

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

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

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

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

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

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

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