哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

它使用方法極其簡(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ù)!

說起泛型,其實(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)該提示無法拼接。以下是簡(jiǎn)單的實(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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4420

    瀏覽量

    67788
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4882

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    函數(shù)信號(hào)發(fā)生器和任意波形信號(hào)發(fā)生器區(qū)別詳解

    函數(shù)發(fā)生器提供了一個(gè)預(yù)置列表,里面列出了它可以生成的波形或碼型。 在函數(shù)發(fā)生器中,用戶可以更改頻率、幅度和偏移等波形參數(shù),還可添加簡(jiǎn)單的失真。 任意波形發(fā)生器更為復(fù)雜,能夠仿真真實(shí)世界中的信號(hào)
    的頭像 發(fā)表于 02-09 16:24 ?305次閱讀
    <b class='flag-5'>函數(shù)</b>信號(hào)發(fā)生器和任意波形信號(hào)發(fā)生器區(qū)別<b class='flag-5'>詳解</b>

    指針與函數(shù)詳解

    1、指針函數(shù)指針函數(shù),從名字上看它本質(zhì)上是一個(gè)函數(shù)。指針函數(shù):返回值類型是指針的函數(shù)。函數(shù)聲明如
    發(fā)表于 01-23 06:02

    嵌入式開發(fā)常用函數(shù)速查表

    在嵌入式開發(fā)中,掌握常用函數(shù)的用法可以大大提高開發(fā)效率。無論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫(kù)和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环萸度胧介_發(fā)常用函數(shù)速查表,覆蓋GPIO
    的頭像 發(fā)表于 01-19 09:06 ?421次閱讀
    嵌入式開發(fā)常用<b class='flag-5'>函數(shù)</b>速查表

    ElfBoard嵌入式教育科普|Linux系統(tǒng)I/O接口:Open函數(shù)詳解

    1.函數(shù)概述open()是Linux/Unix內(nèi)核提供的底層系統(tǒng)調(diào)用,核心功能是打開或創(chuàng)建文件。成功調(diào)用后,內(nèi)核會(huì)返回一個(gè)整型的文件描述符作為該文件的句柄,后續(xù)的所有讀寫操作都基于此描述符進(jìn)行。調(diào)用
    的頭像 發(fā)表于 12-29 11:41 ?1235次閱讀
    ElfBoard嵌入式教育科普|Linux系統(tǒng)I/O接口:Open<b class='flag-5'>函數(shù)</b><b class='flag-5'>詳解</b>

    西門子PLC中函數(shù)FC的使用方法

    函數(shù)函數(shù)塊作為模塊化編程的重要組成部分,在PLC 用戶程序中有著相當(dāng)頻繁的應(yīng)用。兩者在生成與使用的過程中都有一定的相似,且都不能單獨(dú)使用。而需要賦予特定的功能,由組織塊(OB)直接或者間接進(jìn)行調(diào)用。
    的頭像 發(fā)表于 12-19 11:26 ?4474次閱讀
    西門子PLC中<b class='flag-5'>函數(shù)</b>FC的使用方法

    函數(shù)指針及指針函數(shù)的區(qū)別

    在學(xué)習(xí)arm過程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯(cuò),所以今天,我自己想一次把它搞清楚,找了一些資料,和大家的一些總結(jié),整理到此。和大家分享。   首先它們之間的定義:   1、指針函數(shù)是指帶
    發(fā)表于 12-12 06:34

    如何用函數(shù)指針調(diào)用函數(shù)

    給大家舉一個(gè)例子: int Func(int x);/*聲明一個(gè)函數(shù)*/ int (*p) (int x);/*定義一個(gè)函數(shù)指針*/ p = Func; /*將Func函數(shù)的首地址賦給指針變量
    發(fā)表于 12-11 06:26

    mtf 光學(xué)傳遞函數(shù)如何影響圖像的質(zhì)量?

    調(diào)制傳遞函數(shù)(MTF):光學(xué)系統(tǒng)的“清晰度”度量調(diào)制傳遞函數(shù)(ModulationTransferFunction,簡(jiǎn)稱MTF)是光學(xué)成像領(lǐng)域中一個(gè)核心概念,用于量化成像系統(tǒng)對(duì)物體細(xì)節(jié)的傳遞能力。它
    的頭像 發(fā)表于 12-04 16:55 ?1783次閱讀
    mtf 光學(xué)傳遞<b class='flag-5'>函數(shù)</b>如何影響圖像的質(zhì)量?

    LUA例程-常用的回調(diào)函數(shù)使用說明

    詳細(xì)說明LUA腳本函數(shù)功能和對(duì)應(yīng)的應(yīng)用實(shí)例。對(duì)于LUA腳本編程有很大的幫助和提高技能。
    發(fā)表于 11-24 16:43 ?0次下載

    使用函數(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 ?2893次閱讀
    使用<b class='flag-5'>函數(shù)</b>塊實(shí)現(xiàn)三相電機(jī)正反轉(zhuǎn)控制

    大彩講堂:VisualHMI-LUA教程-set_bit/get_bit函數(shù)應(yīng)用

    set_bit/get_bit函數(shù)應(yīng)用
    的頭像 發(fā)表于 08-31 17:05 ?962次閱讀
    大彩講堂:VisualHMI-LUA教程-set_bit/get_bit<b class='flag-5'>函數(shù)</b>應(yīng)用

    大彩講堂:VisualHMI-LUA教程-on_update回調(diào)函數(shù)使用指南

    回調(diào)函數(shù)使用指南
    的頭像 發(fā)表于 08-31 16:25 ?1035次閱讀
    大彩講堂:VisualHMI-LUA教程-on_update回調(diào)<b class='flag-5'>函數(shù)</b>使用指南

    詳解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 ?2187次閱讀

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

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

    MSP430常用內(nèi)聯(lián)函數(shù)說明

    電子發(fā)燒友網(wǎng)站提供《MSP430常用內(nèi)聯(lián)函數(shù)說明.docx》資料免費(fèi)下載
    發(fā)表于 06-05 17:20 ?0次下載
    姚安县| 新巴尔虎左旗| 略阳县| 朔州市| 利津县| 新密市| 莒南县| 乐昌市| 桦川县| 合水县| 康定县| 巩义市| 东丽区| 永兴县| 兴和县| 广宁县| 牙克石市| 仁寿县| 鸡泽县| 黄冈市| 中阳县| 阳春市| 铜川市| 建昌县| 浠水县| 宜兰市| 山东省| 华池县| 衢州市| 重庆市| 阿巴嘎旗| 华蓥市| 定州市| 荥经县| 临江市| 平远县| 吴旗县| 彩票| 湘阴县| 曲松县| 西青区|