Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看專案原始碼
本篇閱讀的代碼實作了將函式柯里化的功能,
在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個引數的函式變換成接受一個單一引數(最初函式的第一個引數)的函式,并且回傳接受余下的引數而且回傳結果的新函式的技術,
本篇閱讀的代碼片段來自于30-seconds-of-python,
curry
from functools import partial
def curry(fn, *args):
return partial(fn,*args)
# EXAMPLES
add = lambda x, y: x + y
add10 = curry(add, 10)
add10(20) # 30
curry函式接收一個接受多個引數的初始函式和部分引數,回傳接受單一引數的函式,
函式使用functools.partial()生成一個部分物件,該部分物件被呼叫時的行為類似于fn給定了部分引數被呼叫,需要提供剩余引數,
在直覺上,柯里化聲稱“如果你固定某些引數,你將得到接受余下引數的一個函式”,所以對于有兩個變數的函式x+y,如果固定了y=2,則得到有一個變數的函式x+2,
functools.partial(func, /, *args, **keywords)
回傳一個新的 部分物件,當被呼叫時其行為類似于 func 附帶位置引數args和關鍵字引數keywords被呼叫, 如果為呼叫提供了更多的引數,它們會被附加到args, 如果提供了額外的關鍵字引數,它們會擴展并多載keywords, 大致等價于:
def partial(func, /, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = {**keywords, **fkeywords}
return func(*args, *fargs, **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/378105.html
標籤:Python
