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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

python偏函數(shù)

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

比如下面這個(gè)函數(shù),是用來計(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

后來我發(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。

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

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

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

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

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

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ù)!

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

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

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

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

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

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

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

審核編輯:符乾江

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

    關(guān)注

    3

    文章

    4405

    瀏覽量

    66798
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4856

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    使用函數(shù)塊實(shí)現(xiàn)三相電機(jī)正反轉(zhuǎn)控制

    在使用西門子S1200PLC,所使用的軟件是博途軟件,在這個(gè)軟件里運(yùn)用了塊的概念。比如我們常見的組織塊(OB)、函數(shù)塊(FB)、數(shù)據(jù)塊(DB)以及函數(shù)FC等。今天我們來具體交流一下這個(gè)函數(shù)塊(FB)的具體使用方法。
    的頭像 發(fā)表于 10-15 14:40 ?2301次閱讀
    使用<b class='flag-5'>函數(shù)</b>塊實(shí)現(xiàn)三相電機(jī)正反轉(zhuǎn)控制

    詳解hal_entry入口函數(shù)

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

    C語言中的內(nèi)聯(lián)函數(shù)與宏

    在C編程中,內(nèi)聯(lián)函數(shù)和宏都用于避免函數(shù)調(diào)用的開銷并編寫可復(fù)用的邏輯部分,但它們?cè)诠ぷ鞣绞胶桶踩苑矫娲嬖陲@著差異。
    的頭像 發(fā)表于 07-25 15:10 ?1701次閱讀
    C語言中的內(nèi)聯(lián)<b class='flag-5'>函數(shù)</b>與宏

    為什么不需要給回調(diào)函數(shù)傳遞參數(shù)

    回調(diào)函數(shù)是C語言里面一個(gè)重要機(jī)制。
    的頭像 發(fā)表于 04-15 10:11 ?611次閱讀

    函數(shù)指針的六個(gè)常見應(yīng)用場景

    函數(shù)指針在嵌入式開發(fā)中有著廣泛的應(yīng)用,它讓代碼更加靈活,減少冗余,提高可擴(kuò)展性。很多時(shí)候,我們需要根據(jù)不同的情況動(dòng)態(tài)調(diào)用不同的函數(shù),而函數(shù)指針正是實(shí)現(xiàn)這一需求的重要工具。本文將介紹六個(gè)常見的
    的頭像 發(fā)表于 04-07 11:58 ?1092次閱讀
    <b class='flag-5'>函數(shù)</b>指針的六個(gè)常見應(yīng)用場景

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

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

    解鎖TSMaster fifo函數(shù):報(bào)文讀取的高效方法

    前言:TSMaster目前有兩種讀取報(bào)文的模式:回調(diào)函數(shù)模式和fifo模式。fifo函數(shù)是TSMaster近期新增的函數(shù),本文將重點(diǎn)介紹fifo模塊。關(guān)于回調(diào)函數(shù)的使用方法可以參考幫助
    的頭像 發(fā)表于 03-14 20:04 ?912次閱讀
    解鎖TSMaster fifo<b class='flag-5'>函數(shù)</b>:報(bào)文讀取的高效方法

    是德33220A 函數(shù)任意波形發(fā)生器

    是德33220A 函數(shù)任意波形發(fā)生器 儀器特性 *33220A 函數(shù)發(fā)生器包括 USB、GPIB 和 LAN 接口 *用于信號(hào)設(shè)置視覺驗(yàn)證的圖形模式 *選件 001 提供支持同步信道的多元鏈路
    的頭像 發(fā)表于 02-07 15:55 ?650次閱讀

    C語言如何處理函數(shù)的返回值

    當(dāng)你在函數(shù)的最后寫上 return 0 的時(shí)候,它是如何返回給調(diào)用函數(shù)的? 比如 test 函數(shù),為了待會(huì)更好的看懂匯編代碼,我寫成了 return 1234。 處理函數(shù)的返回值,是不
    的頭像 發(fā)表于 01-16 09:21 ?733次閱讀

    西門子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 ?3013次閱讀
    西門子TIA Portal中<b class='flag-5'>函數(shù)</b>FC和<b class='flag-5'>函數(shù)</b>塊FB的相互轉(zhuǎn)換

    如何把兩個(gè)數(shù)據(jù)返回給調(diào)用函數(shù)

    函數(shù)的處理結(jié)果包含兩個(gè)數(shù)據(jù),如何把兩個(gè)數(shù)據(jù)返回給調(diào)用函數(shù)? 第一種,把兩個(gè)數(shù)據(jù)封裝成一個(gè)結(jié)構(gòu)體,函數(shù)返回結(jié)構(gòu)體。 調(diào)用函數(shù)的地方同樣用結(jié)構(gòu)體去接收
    的頭像 發(fā)表于 01-08 10:15 ?667次閱讀

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

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

    stdio.h實(shí)現(xiàn)了printf函數(shù)?

    我們平時(shí)包含的 stdio.h 頭文件,里面是不是實(shí)現(xiàn)了 printf 函數(shù)? 為什么會(huì)有這個(gè)疑問?因?yàn)槊看问褂?printf,就得包含 stdio.h ,這就導(dǎo)致很多同學(xué)誤以為,stdio.h
    的頭像 發(fā)表于 12-18 10:28 ?851次閱讀

    各類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 ?3417次閱讀
    各類Modbus功能接口<b class='flag-5'>函數(shù)</b><b class='flag-5'>詳解</b>

    HAL庫的函數(shù)調(diào)用示例

    HAL(Hardware Abstraction Layer,硬件抽象層)庫是STM32等微控制器中常用的庫,它為開發(fā)者提供了訪問和控制硬件設(shè)備的接口。以下是一些常用的HAL庫函數(shù)及其調(diào)用示例: 一
    的頭像 發(fā)表于 12-02 14:01 ?2741次閱讀