亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中functools模塊函數(shù)解析

 更新時間:2017年03月12日 15:00:07   作者:Wray  
這篇文章主要介紹了Python中functools模塊的常用函數(shù)解析,分別講解了functools.cmp_to_key,functools.total_ordering,functools.reduce,functools.partial,functools.update_wrapper和functools.wraps的用法,需要的朋友可以參考下

Python自帶的 functools 模塊提供了一些常用的高階函數(shù),也就是用于處理其它函數(shù)的特殊函數(shù)。換言之,就是能使用該模塊對可調(diào)用對象進行處理。

functools模塊函數(shù)概覽

  • 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()

語法:

functools.cmp_to_key(func) 

該函數(shù)用于將舊式的比較函數(shù)轉換為關鍵字函數(shù)。

舊式的比較函數(shù):接收兩個參數(shù),返回比較的結果。返回值小于零則前者小于后者,返回值大于零則相反,返回值等于零則兩者相等。

關鍵字函數(shù):接收一個參數(shù),返回其對應的可比較對象。例如 sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby() 都可作為關鍵字函數(shù)。

在 Python 3 中,有很多地方都不再支持舊式的比較函數(shù),此時可以使用 cmp_to_key() 進行轉換。

示例:

sorted(iterable, key=cmp_to_key(cmp_func)) 

functools.total_ordering()

語法:

functools.total_ordering(cls) 

這是一個類裝飾器,用于自動實現(xiàn)類的比較運算。

我們只需要在類中實現(xiàn) __eq__() 方法和以下方法中的任意一個 __lt__(), __le__(), __gt__(), __ge__(),那么 total_ordering() 就能自動幫我們實現(xiàn)余下的幾種比較運算。

示例:

@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()

語法:

functools.reduce(function, iterable[, initializer]) 

該函數(shù)與 Python 內(nèi)置的 reduce() 函數(shù)相同,主要用于編寫兼容 Python 3 的代碼。

functools.partial()

語法:

functools.partial(func[, *args][, **keywords]) 

該函數(shù)返回一個 partial 對象,調(diào)用該對象的效果相當于調(diào)用 func 函數(shù),并傳入位置參數(shù) args 和關鍵字參數(shù) keywords 。如果調(diào)用該對象時傳入了位置參數(shù),則這些參數(shù)會被添加到 args 中。如果傳入了關鍵字參數(shù),則會被添加到 keywords 中。

partial() 函數(shù)的等價實現(xiàn)大致如下:

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

partial() 函數(shù)主要用于“凍結”某個函數(shù)的部分參數(shù),返回一個參數(shù)更少、使用更簡單的函數(shù)對象。

示例:

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18 


functools.update_wrapper()

語法:

functools.update_wrapper(wrapper, wrapped[, assigned][, updated]) 

該函數(shù)用于更新包裝函數(shù)(wrapper),使它看起來像原函數(shù)一樣??蛇x的參數(shù)是一個元組,assigned 元組指定要直接使用原函數(shù)的值進行替換的屬性,updated 元組指定要對照原函數(shù)進行更新的屬性。這兩個參數(shù)的默認值分別是模塊級別的常量:WRAPPER_ASSIGNMENTS 和 WRAPPER_UPDATES。前者指定了對包裝函數(shù)的 __name__, __module__, __doc__ 屬性進行直接賦值,而后者指定了對包裝函數(shù)的 __dict__ 屬性進行更新。

該函數(shù)主要用于裝飾器函數(shù)的定義中,置于包裝函數(shù)之前。如果沒有對包裝函數(shù)進行更新,那么被裝飾后的函數(shù)所具有的元信息就會變?yōu)榘b函數(shù)的元信息,而不是原函數(shù)的元信息。

functools.wraps()

語法:

functools.wraps(wrapped[, assigned][, updated]) 

wraps() 簡化了 update_wrapper() 函數(shù)的調(diào)用。它等價于 partial(update_wrapper, wrapped=wrapped, assigned, updated=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' 

如果不使用這個函數(shù),示例中的函數(shù)名就會變成 wrapper ,并且原函數(shù) example() 的說明文檔(docstring)就會丟失。

相關文章

最新評論