Python高階之偏函式

2021-07-04 06:27:32 字數 1734 閱讀 2728

當乙個函式有很多引數時,呼叫者就需要提供多個引數。如果減少引數個數,就可以簡化呼叫者的負擔。

比如,int()函式可以把字串轉換為整數,當僅傳入字串時,int()函式預設按十進位制轉換:

>>> int('12345')

12345

但int()函式還提供額外的base引數,預設值為10。如果傳入base引數,就可以做n進製的轉換:

>>> int('12345', base=8)

5349

>>> int('12345', 16)

74565

假設要轉換大量的二進位制字串,每次都傳入int(x, base=2)非常麻煩,於是,我們想到,可以定義乙個int2()的函式,預設把base=2傳進去:

def

int2

(x, base=2):

return int(x, base)

這樣,我們轉換二進位制就非常方便了:

>>> int2('1000000')

64>>> int2('1010101')

85

functools.partial就是幫助我們建立乙個偏函式的,不需要我們自己定義int2(),可以直接使用下面的**建立乙個新的函式int2

>>> 

import functools

>>> int2 = functools.partial(int, base=2)

>>> int2('1000000')

64>>> int2('1010101')

85

所以,functools.partial可以把乙個引數多的函式變成乙個引數少的新函式,少的引數需要在建立時指定預設值,這樣,新函式呼叫的難度就降低了。

python高階之自定義排序中我們在sorted這個高階函式中傳入自定義排序函式就可以實現忽略大小寫排序。請用functools.partial把這個複雜呼叫變成乙個簡單的函式:

sorted_ignore_case(iterable)
解答

要固定sorted()cmp引數,需要傳入乙個排序函式作為cmp的預設值。

from filecmp import cmp

import functools

# sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper())) python2 的寫法

sorted_ignore_case = functools.partial(sorted, key=lambda a:a.upper())

print (sorted_ignore_case(['bob', 'about', 'zoo', 'credit']))

python偏函式和高階函式 高階函式與偏函式

今天主要在這裡仔細說明一下高階函式與偏函式的知識。高階函式 在絕大多數通常的計算機語言裡,函式的引數只接受基本的資料型別或是物件的引用,返回值也只是基本資料型別或者物件引用。示例如下 function test1 else return function console.log 資料不符合規範,錯誤...

python之偏函式

定義 偏函式的第二個部分 可變引數 按原有函式的引數順序進行補充,引數將作用在原函式上,最後偏函式返回乙個新函式 類似於,裝飾器decorator,對於函式進行二次包裝,產生特殊效果 但又不同於裝飾器,偏函式產生了乙個新函式,而裝飾器,可改變被裝飾函式的函式入口位址也可以不影響原函式 效果 固定一部...

函式式程式設計 高階函式之偏函式

偏函式 functools.partial的作用就是,把乙個函式的某些引數給固定住 也就是設定預設值 返回乙個新的函式,呼叫這個新函式會更簡單。import functools int2 functools.partial int,base 2 python的functools模組提供了很多有用的功...