Python中如何使用偏函數(shù)-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關Python中如何使用偏函數(shù),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

10年積累的網(wǎng)站設計、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先制作網(wǎng)站后付款的網(wǎng)站建設流程,更有宿城免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

偏函數(shù) partial 應用

函數(shù)在執(zhí)行時,要帶上所有必要的參數(shù)進行調(diào)用。但是,有時參數(shù)可以在函數(shù)被調(diào)用之前提前獲知。這種情況下,一個函數(shù)有一個或多個參數(shù)預先就能用上,以便函數(shù)能用更少的參數(shù)進行調(diào)用。

偏函數(shù)是將所要承載的函數(shù)作為partial()函數(shù)的第一個參數(shù),原函數(shù)的各個參數(shù)依次作為partial()函數(shù)后續(xù)的參數(shù),除非使用關鍵字參數(shù)。

通過語言描述可能無法理解偏函數(shù)是怎么使用的,那么就舉一個常見的例子來說明。在這個例子里,我們實現(xiàn)了一個取余函數(shù),對于整數(shù) 100,取得對于不同數(shù) m 的 100%m 的余數(shù)。

from functools import partial
 
def mod( n, m ):
  return n % m
 
mod_by_100 = partial( mod, 100 )
 
print mod( 100, 7 )  # 2
print mod_by_100( 7 )  # 2

由于之前看到的例子一般選擇加法或乘法來講解,無法體會偏函數(shù)參數(shù)的位置問題,容易給人造成 partial 的第二個參數(shù)也是原函數(shù)的第二個參數(shù)的假象,所以我在這里選擇 mod 來講解。

而對于有關鍵字參數(shù)的情況下,就可以不按照原函數(shù)的參數(shù)位置和個數(shù)了。下面再看一個例子,講的是如何進行不同的進制轉(zhuǎn)換。

from functools import partial
 
bin2dec = partial( int, base=2 )
print bin2dec( '0b10001' )  # 17
print bin2dec( '10001' )  # 17
 
hex2dec = partial( int, base=16 )
print hex2dec( '0x67' )  # 103
print hex2dec( '67' )  # 103

偏函數(shù)的這些應用看似簡單,用途卻很大,可以很好的執(zhí)行DRY原則,節(jié)省編程成本。

關于偏函數(shù),可以對現(xiàn)有函數(shù)進行加強。

>>> import functools
>>> int2 =functools.partial (int, base=2) # 把 int 的轉(zhuǎn)換設為二進制了,這里 base 是 int 函數(shù)表示進制的參數(shù)。
>>>int2('1000000')
64
>>>int2('1010101')
85

在重設之后, 也可以在函數(shù)調(diào)用時傳入其他值:

>>> int2('1000000', base=10)  # 這里 base 變成了 10,覆蓋了已設的默認值 2。
1000000

注意這里在創(chuàng)建新的偏函數(shù)后,依舊可以更改已經(jīng)設置的默認值,但是必須清晰指出是更改了 base 的值。

否則如果直接傳如一個數(shù)值會報錯:

int2('100', 10)  # 報錯,10 前未加 base=,不能分辨這是傳給 base 的

原因如下:

創(chuàng)建偏函數(shù)時,實際上可以接收函數(shù)對象、*args 和 **kw 這 3 個參數(shù),當傳入:

int2 =functools.partial(int, base=2)  # int 是函數(shù)對象,base=2 是 **kw,沒有傳入 *args 參數(shù)

實際上固定了 int() 函數(shù)的關鍵字參數(shù) base,也就是:

int2('10010')

相當于:

kw = { 'base': 2 }
int('10010', **kw)  # 如果不指明 base=2 而只是傳入 2 的話,那么 2 被認為是 *args 的值

當傳入:

max2 =functools.partial(max, 10)  # 這里的 10 顯然就是作為 *args 里的值傳入的

實際上會把 10 作為 *args 的一部分自動加到參數(shù)列表里去,也就是:

max2(5,6, 7)  # 原本有 *args 的列表,然后會把 10 再加進去

相當于:

args = (10, 5, 6, 7)
max(*args)

結(jié)果為 10。

關于Python中如何使用偏函數(shù)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當前題目:Python中如何使用偏函數(shù)-創(chuàng)新互聯(lián)
當前地址:http://muchs.cn/article16/dgcedg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、用戶體驗、營銷型網(wǎng)站建設面包屑導航、移動網(wǎng)站建設、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)