国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中functools模塊函數解析

2019-11-25 16:19:21
字體:
來源:轉載
供稿:網友

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

語法:

functools.cmp_to_key(func) 

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

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

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

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

示例:

sorted(iterable, key=cmp_to_key(cmp_func)) 

functools.total_ordering()

語法:

functools.total_ordering(cls) 

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

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

示例:

@total_orderingclass 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]) 

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

functools.partial()

語法:

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

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

partial() 函數的等價實現大致如下:

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() 函數主要用于“凍結”某個函數的部分參數,返回一個參數更少、使用更簡單的函數對象。

示例:

>>> 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]) 

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

該函數主要用于裝飾器函數的定義中,置于包裝函數之前。如果沒有對包裝函數進行更新,那么被裝飾后的函數所具有的元信息就會變為包裝函數的元信息,而不是原函數的元信息。

functools.wraps()

語法:

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

wraps() 簡化了 update_wrapper() 函數的調用。它等價于 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' 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西乌| 镇安县| 盈江县| 德化县| 嘉兴市| 卓资县| 阿合奇县| 永丰县| 彰化县| 黑河市| 南汇区| 邯郸市| 内丘县| 页游| 永丰县| 石棉县| 汤阴县| 翁牛特旗| 育儿| 涟源市| 靖远县| 兴业县| 晋州市| 宜君县| 浦东新区| 绵竹市| 房产| 乾安县| 巴林右旗| 清河县| 泸定县| 花垣县| 鸡西市| 沈丘县| 嘉定区| 五家渠市| 郑州市| 西吉县| 泊头市| 禹州市| 卫辉市|