當乙個函式有很多引數時,呼叫者就需要提供多個引數。如果減少引數個數,就可以簡化呼叫者的負擔。
比如,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模組提供了很多有用的功...