91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python functools模塊如何使用

發布時間:2020-09-24 13:24:46 來源:億速云 閱讀:154 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關Python functools模塊如何使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

functools 模塊中主要包含了一些函數裝飾器和便捷的功能函數。在 Python 的交互式解釋器中先導入 functools 模塊,然后輸入 [e for e in dir(functools) if not e.startswith('_')] 命令,即可看到該模塊所包含的全部屬性和函數:

>>> [e for e in dir(functools) if not e.startswith('_')]
['MappingProxyType', 'RLock', 'WRAPPER_ASSIGNMENTS', 'WRAPPER_UPDATES', 'WeakKeyDictionary', 'cmp_to_key', 
'get_cache_token', 'lru_cache', 'namedtuple', 'partial', 'partialmethod', 'recursive_repr', 'reduce', 'singledispatch',
 'total_ordering', 'update_wrapper', 'wraps']

在functools 模塊中常用的函數裝飾器和功能函數如下:

functools.cmp_to_key(func):將老式的比較函數(func)轉換為關鍵字函數(key function)。在 Python 3 中比較大小、排序都是基于關鍵字函數的,Python 3 不支持老式的比較函數。

@functools.lru_cache(maxsize=128, typed=False):該函數裝飾器使用 LRU(最近最少使用)緩存算法來緩存相對耗時的函數結果,避免傳入相同的參數重復計算。同時,緩存并不會無限增長,不用的緩存會被釋放。其中 maxsize 參數用于設置緩存占用的最大字節數,typed 參數用于設置將不同類型的緩存結果分開存放。

@functools.total_ordering:這個類裝飾器(作用類似于函數裝飾器,只是它用于修飾類)用于為類自動生成比較方法。通常來說,開發者只要提供 __lt__()、__le__()、__gt__()、__ge__() 其中之一(最好能提供 __eq__() 方法),@functools.total_ordering裝飾器就會為該類生成剩下的比較方法。

functools.partial(func, *args, **keywords):該函數用于為 func 函數的部分參數指定參數值,從而得到一個轉換后的函數,程序以后調用轉換后的函數時,就可以少傳入那些己指定值的參數。

functools.partialmethod(func, *args, **keywords):該函數與上一個函數的含義完全相同,只不過該函數用于為類中的方法設置參數值。

functools.reduce(function, iterable[, initializer]):將初始值(默認為 0,可由 initializer 參數指定)、迭代器的當前元素傳入 function 函數,將計算出來的函數結果作為下一次計算的初始值、迭代器的下一個元素再次調用 function 函數……依此類推,直到迭代器的最后一個元素。

@functools.singledispatch:該函數裝飾器用于實現函數對多個類型進行重載。比如同樣的函數名稱,為不同的參數類型提供不同的功能實現。該函數的本質就是根據參數類型的變換,將函數轉向調用不同的函數。

functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):對 wrapper 函數進行包裝,使之看上去就像 wrapped(被包裝)函數。

@functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):該函數裝飾器用于修飾包裝函數,使包裝函數看上去就像 wrapped 函數。

通過介紹不難發現,functools.update_wrapper 和 @functools.wraps 的功能是一樣的,只不過前者是函數,因此需要把包裝函數作為第一個參數傳入;而后者是函數裝飾器,因此使用該函數裝飾器修飾包裝函數即可,無須將包裝函數作為第一個參數傳入。

下面程序示范了 functiontools 棋塊中部分函數或函數裝飾器的用法:

from functools import *
# 以初始值(默認為0)為x,以當前序列元素為y,x+y的和作為下一次的初始值
print(reduce(lambda x,y: x + y, range(5))) # 10
print(reduce(lambda x,y: x + y, range(6))) # 15
# 設初始值為10
print(reduce(lambda x,y: x + y, range(6), 10)) # 25
print('----------------')
class User:
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return 'User[name=%s' % self.name
# 定義一個老式的大小比較函數,User的name越長,該User越大
def old_cmp(u1 , u2):
    return len(u1.name) - len(u2.name)
my_data = [User('Kotlin'), User('Swift'), User('Go'), User('Java')]
# 對my_data排序,需要關鍵字參數(調用cmp_to_key將old_cmp轉換為關鍵字參數
my_data.sort(key=cmp_to_key(old_cmp))
print(my_data)
print('----------------')
@lru_cache(maxsize=32)
def factorial(n):
    print('~~計算%d的階乘~~' % n)
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)
# 只有這行會計算,然后會緩存5、4、3、2、1的解乘
print(factorial(5))
print(factorial(3))
print(factorial(5))
print('----------------')
# int函數默認將10進制的字符串轉換為整數
print(int('12345'))
# 為int函數的base參數指定參數值
basetwo = partial(int, base=2)
basetwo.__doc__ = '將二進制的字符串轉換成整數'
# 相當于執行base為2的int()函數
print(basetwo('10010'))
print(int('10010', 2))

以上就是Python functools模塊如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

SHOW| 维西| 新宁县| 大渡口区| 巫溪县| 蒙自县| 阳朔县| 托里县| 西安市| 灌云县| 左权县| 江达县| 逊克县| 南部县| 姜堰市| 剑河县| 上杭县| 东兰县| 亚东县| 澄城县| 城市| 定襄县| 巴林右旗| 铁岭县| 安溪县| 响水县| 故城县| 葵青区| 靖西县| 永安市| 区。| 治县。| 衡山县| 锡林郭勒盟| 双流县| 南川市| 周口市| 如东县| 德阳市| 伊通| 滁州市|