成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python庫functools示例詳解

開發(fā) 前端
functools 是 Python 標(biāo)準(zhǔn)庫中一個(gè)極為實(shí)用的模塊,提供了許多用于處理函數(shù)、高階函數(shù)以及函數(shù)式編程的工具。

functools

functools 是 Python 標(biāo)準(zhǔn)庫中一個(gè)極為實(shí)用的模塊,提供了許多用于處理函數(shù)、高階函數(shù)以及函數(shù)式編程的工具。

1. functools.partial

用途: 創(chuàng)建一個(gè)新函數(shù),它固定了原函數(shù)的部分參數(shù)。

示例:

from functools import partial
def power(base, exponent):
    return base ** exponent
# 創(chuàng)建一個(gè)固定底數(shù)為2的新函數(shù)
square = partial(power, base=2)
# 調(diào)用新函數(shù)只需傳遞指數(shù)
print(square(3))  # 輸出: 8

2. functools.update_wrapper / functools.wraps

用途: 在編寫裝飾器時(shí),保持被裝飾函數(shù)的元信息(如名稱、文檔字符串、注解等)不變。

示例:

from functools import wraps
def 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_logging
def greet(name):
    """Greet someone by their name."""
    return f"Hello, {name}!"
print(greet.__name__)  # 輸出: greet
print(greet.__doc__)   # 輸出: Greet someone by their name.
greet("Alice")  # 輸出: Calling greet with arguments ('Alice',), {} 和 "greet returned: Hello, Alice!"

3. functools.total_ordering

用途: 通過實(shí)現(xiàn)一個(gè)或少數(shù)幾個(gè)關(guān)鍵比較方法(如 __eq__ 和 __lt__),自動為一個(gè)類生成所有必要的比較方法(如 __le__, __gt__, __ge__, __ne__)。

示例:

from functools import total_ordering
@total_ordering
class 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)  # 輸出: True
print(p1 > p2)   # 輸出: False

4. functools.lru_cache

用途: 實(shí)現(xiàn)函數(shù)結(jié)果的緩存,以提高性能。基于“最近最少使用”(Least Recently Used, LRU)策略自動丟棄舊的緩存項(xiàng)。

示例:

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

5. functools.reduce

用途: 對一個(gè)可迭代對象(如列表)應(yīng)用一個(gè)累積函數(shù),從左到右將元素兩兩結(jié)合,返回單一結(jié)果。

示例:

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

6. functools.cmp_to_key

用途: 將舊式的比較函數(shù)(接受兩個(gè)參數(shù)并返回負(fù)數(shù)、零或正數(shù)表示小于、等于或大于)轉(zhuǎn)換為可用于排序的鍵函數(shù)。

示例:

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

以上示例

涵蓋了 functools 模塊中一些常用且重要的功能,包括部分函數(shù)應(yīng)用、裝飾器元信息保留、簡化類比較方法、函數(shù)緩存、累積計(jì)算以及舊式比較函數(shù)的轉(zhuǎn)換。根據(jù)實(shí)際需求,可以靈活運(yùn)用這些工具來增強(qiáng)代碼的簡潔性、效率和可讀性。

責(zé)任編輯:華軒 來源: 測試開發(fā)學(xué)習(xí)交流
相關(guān)推薦

2024-03-19 07:54:57

FunctoolsPython函數(shù)式編程

2023-11-24 11:20:04

functoolsPython

2011-08-19 14:53:02

SQL ServerDataRelatio

2010-03-18 09:33:46

python隨機(jī)數(shù)模塊

2011-07-01 17:12:44

Qt OpenGL

2023-12-12 13:55:00

Pythonsubprocess命令

2022-05-09 08:55:58

Linuxdiff命令

2023-09-13 14:42:08

typedefC++

2010-05-26 09:44:41

MySQL數(shù)據(jù)庫使用

2010-03-18 14:55:17

Python數(shù)據(jù)庫連接

2024-05-11 08:47:36

Python工具裝飾器

2020-03-22 11:12:25

加速函數(shù)Python程序員

2023-03-09 07:47:56

BeanFactorSpring框架

2024-09-13 17:06:54

EF Core分組查詢

2024-09-23 16:55:18

C#代碼開發(fā)

2024-07-17 08:15:09

2023-09-25 13:19:41

pandasPython

2010-02-02 14:22:50

Python示例

2025-04-16 10:03:40

開發(fā)Spring應(yīng)用程序

2023-05-15 08:50:58

ContextGolang
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费h在线 | 九九免费在线视频 | 一区二区精品电影 | 一级欧美一级日韩片 | 国产1区2区3区 | 久久久久成人精品 | 草草在线观看 | 日韩中文字幕免费在线观看 | 欧美综合国产精品久久丁香 | 欧美一级做性受免费大片免费 | 综合久久色 | 国产欧美日韩综合精品一区二区 | 亚洲成人精品视频 | 成人99| 男女深夜网站 | 色综合欧美 | 亚洲精品一区在线 | 97国产精品视频人人做人人爱 | 欧美久久久久久久久中文字幕 | 中文字幕在线不卡播放 | 你懂的在线视频播放 | 久久久久久网站 | 中文字幕免费视频 | 精品久久精品 | 成人毛片一区二区三区 | 免费观看毛片 | 日韩精品久久久 | 成人综合在线视频 | 日韩一级二级片 | 欧美精品在线免费 | 日韩免费一区 | 国产视频黄色 | 国产区一区 | 久久久高清 | 日韩av成人 | 国产精品久久久久久久久 | 欧美aⅴ| av毛片 | 国产在线精品区 | 国产精品久久国产精品99 gif | 国产乱码精品一区二区三区忘忧草 |