日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python庫functools示例詳解

來源: 責編: 時間:2024-04-28 17:20:09 155觀看
導讀functoolsfunctools 是 Python 標準庫中一個極為實用的模塊,提供了許多用于處理函數、高階函數以及函數式編程的工具。1. functools.partial用途: 創建一個新函數,它固定了原函數的部分參數。示例:from functools impor

functools

X1E28資訊網——每日最新資訊28at.com

functools 是 Python 標準庫中一個極為實用的模塊,提供了許多用于處理函數、高階函數以及函數式編程的工具。X1E28資訊網——每日最新資訊28at.com

1. functools.partial

用途: 創建一個新函數,它固定了原函數的部分參數。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import partialdef power(base, exponent):    return base ** exponent# 創建一個固定底數為2的新函數square = partial(power, base=2)# 調用新函數只需傳遞指數print(square(3))  # 輸出: 8

2. functools.update_wrapper / functools.wraps

用途: 在編寫裝飾器時,保持被裝飾函數的元信息(如名稱、文檔字符串、注解等)不變。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import wrapsdef add_logging(func):    @wraps(func)    def wrapper(*args, **kwargs):        print(f"Calling {func.__name__} with arguments {args}, {kwargs}")        result = func(*args, **kwargs)        print(f"{func.__name__} returned: {result}")        return result    return wrapper@add_loggingdef greet(name):    """Greet someone by their name."""    return f"Hello, {name}!"print(greet.__name__)  # 輸出: greetprint(greet.__doc__)   # 輸出: Greet someone by their name.greet("Alice")  # 輸出: Calling greet with arguments ('Alice',), {} 和 "greet returned: Hello, Alice!"

3. functools.total_ordering

用途: 通過實現一個或少數幾個關鍵比較方法(如 __eq__ 和 __lt__),自動為一個類生成所有必要的比較方法(如 __le__, __gt__, __ge__, __ne__)。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import total_ordering@total_orderingclass Person:    def __init__(self, name, age):        self.name = name        self.age = age    def __eq__(self, other):        return self.name == other.name and self.age == other.age    def __lt__(self, other):        return self.age < other.age# 自動擁有所有比較方法,如 __le__, __gt__, __ge__, __ne__p1 = Person("Alice", 25)p2 = Person("Bob", 30)print(p1 <= p2)  # 輸出: Trueprint(p1 > p2)   # 輸出: False

4. functools.lru_cache

用途: 實現函數結果的緩存,以提高性能。基于“最近最少使用”(Least Recently Used, LRU)策略自動丟棄舊的緩存項。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import lru_cache@lru_cache(maxsize=32)def fibonacci(n):    if n < 2:        return n    return fibonacci(n - 1) + fibonacci(n - 2)# 多次調用相同參數時,從緩存中獲取結果,避免重復計算print(fibonacci(20))  # 第一次調用進行計算print(fibonacci(20))  # 第二次調用直接使用緩存

5. functools.reduce

用途: 對一個可迭代對象(如列表)應用一個累積函數,從左到右將元素兩兩結合,返回單一結果。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import reducenumbers = [1, 2, 3, 4, 5]# 計算列表元素的乘積product = reduce(lambda x, y: x * y, numbers)print(product)  # 輸出: 120

6. functools.cmp_to_key

用途: 將舊式的比較函數(接受兩個參數并返回負數、零或正數表示小于、等于或大于)轉換為可用于排序的鍵函數。X1E28資訊網——每日最新資訊28at.com

示例:X1E28資訊網——每日最新資訊28at.com

from functools import cmp_to_keydef compare_names(name1, name2):    if name1 < name2:        return -1    elif name1 > name2:        return 1    else:        return 0names = ["Alice", "Bob", "Charlie", "David"]# 使用舊式比較函數進行排序sorted_names = sorted(names, key=cmp_to_key(compare_names))print(sorted_names)  # 輸出: ['Alice', 'Bob', 'Charlie', 'David']

以上示例

涵蓋了 functools 模塊中一些常用且重要的功能,包括部分函數應用、裝飾器元信息保留、簡化類比較方法、函數緩存、累積計算以及舊式比較函數的轉換。根據實際需求,可以靈活運用這些工具來增強代碼的簡潔性、效率和可讀性。X1E28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-86210-0.htmlPython庫functools示例詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 處理圖片的十個庫

下一篇: C++函數傳遞二維數組的三種方法

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 嘉峪关市| 太原市| 普洱| 方城县| 瑞丽市| 鲜城| 樟树市| 桃源县| 遵义县| 锦屏县| 益阳市| 仲巴县| 威信县| 钦州市| 河南省| 久治县| 桂东县| 织金县| 乌兰察布市| 天柱县| 崇州市| 灯塔市| 寿宁县| 拉萨市| 巴青县| 新竹县| 朝阳县| 遵化市| 缙云县| 九江县| 周至县| 景德镇市| 镇赉县| 都江堰市| 天津市| 科技| 密云县| 乐安县| 卢湾区| 南宫市| 鹤壁市|