這篇文章主要介紹了Python中functools模組的常用函數解析,分別講解了functools.cmp_to_key,functools.total_ordering,functools.reduce,functools.partial,functools.update_wrapper和functools.rapwraps.可以參考下
Python自帶的functools 模組提供了一些常用的高階函數,也就是用來處理其它函數的特殊函數。換言之,就是能使用該模組對可呼叫物件進行處理。
functools模組函數概覽
#functools.cmp_to_key(func)
#functools.total_ordering(cls)
#functools.reduce(function, iterable[, initializer])
functools.partial (func[, args][, *keywords])
functools.update_wrapper(wrapper, wrapped[, assigned][, updated])
#functools.wraps(wrapped[, assigned][, updated])
##functools.cmp_to_key()
# #語法:
舊式的比較函數:接收兩個參數,傳回比較的結果。傳回值小於零則前者小於後者,回傳值大於零則相反,回傳值等於零則兩者相等。 關鍵字函數:接收一個參數,並傳回其對應的可比較物件。例如sort
ed(), min(), max(), heapq.nlargest(), heapq.nsmall
est(), itertools.groupby() 都可作為關鍵字函數。 在 Python 3 中,有許多地方不再支援舊式的比較函數,此時可以使用 cmp_to_key() 來轉換。範例:
sorted(iterable, key=cmp_to_key(cmp_func))
語法:##functools.total_ordering( cls)
@total_ordering class Student: def eq(self, other): return ((self.lastname.lower(), self.firstname.lower()) == (other.lastname.lower(), other.firstname.lower())) def lt(self, other): return ((self.lastname.lower(), self.firstname.lower()) < (other.lastname.lower(), other.firstname.lower()))
functools.reduce( function, iterable[, initializer])
functools.partial()
functools.partial(func[, *args][, * *keywords])
def partial(func, *args, **keywords): def newfunc(*fargs, **fkeywords): newkeywords = keywords.copy() newkeywords.update(fkeywords) return func(*(args + fargs), **newkeywords) newfunc.func = func newfunc.args = args newfunc.keywords = keywords return newfunc
>>> from functools import partial >>> basetwo = partial(int, base=2) >>> basetwo.doc = 'Convert base 2 string to an int.' >>> basetwo('10010') 18
functools.update_wrapper(wrapper, wrapped [, assigned][, updated])
此函數用於更新包裝函數(wrapper),讓它看起來像原始函數一樣。可選的參數是一個元組,assigned 元組指定要直接使用原函數的值進行替換的屬性,updated 元組指定要對照原始函數進行更新的屬性。這兩個參數的預設值分別是模組層級的常數:WRAPPER_ASSIGNMENTS 和 WRAPPER_UPDATES。前者指定了對包裝函數的 name, module
, doc 屬性進行直接賦值,而後者指定了包裝函數的 dict 屬性進行更新。 此函數主要用於裝飾函數的定義中,置於包裝函數之前。如果沒有對包裝函數進行更新,那麼被裝飾後的函數所具有的元信息就會變成包裝函數的元信息,而不是原函數的元信息。functools.wraps()
functools.wraps(wrapped[, assigned][, updated])
>>> from functools import wraps >>> def my_decorator(f): ... @wraps(f) ... def wrapper(*args, **kwds): ... print 'Calling decorated function' ... return f(*args, **kwds) ... return wrapper >>> @my_decorator ... def example(): ... """Docstring""" ... print 'Called example function' >>> example() Calling decorated function Called example function >>> example.name 'example' >>> example.doc 'Docstring'
1. Python免費視訊教學
##2. 3.以上是實例解析functools模組函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!