自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Functools模塊:讓Python編程更高效

開(kāi)發(fā)
本文將詳細(xì)介紹functools模塊的主要功能,并通過(guò)實(shí)例演示如何使用這些功能來(lái)提高我們的編程效率。

不知道小伙伴們?cè)赑ython編程中,我們經(jīng)常會(huì)遇到一些需要反復(fù)使用的代碼片段,例如裝飾器、高階函數(shù)等。為了提高代碼的復(fù)用性和可讀性,Python提供了functools模塊。functools模塊包含了許多實(shí)用的功能,可以幫助我們更好地編寫(xiě)和優(yōu)化Python代碼。本文將詳細(xì)介紹functools模塊的主要功能,并通過(guò)實(shí)例演示如何使用這些功能來(lái)提高我們的編程效率。

functools 是 Python 的一個(gè)內(nèi)置模塊,提供了一些方便的函數(shù)工具。下面是 functools 模塊中其中一些常用函數(shù)的詳細(xì)使用:

functools.partial

用于給一個(gè)已有函數(shù)設(shè)定默認(rèn)參數(shù),返回一個(gè)新函數(shù)。新函數(shù)的調(diào)用方式與原有函數(shù)調(diào)用方式相同,所以它非常適合做一些常規(guī)參數(shù)設(shè)置,來(lái)減少代碼中的重復(fù)部分。舉例來(lái)說(shuō),假設(shè)我們有一個(gè)計(jì)算平方的函數(shù),我們想設(shè)定它的默認(rèn)參數(shù)為 2,可以使用如下代碼:

import functools
def square(base, power):
    return base ** power

square_2 = `functools.partial(square, power=2)
print(square_2(4)) 
# 輸出16

functools.reduce

該函數(shù)用于對(duì)一個(gè)序列中的項(xiàng)進(jìn)行使用累計(jì)函數(shù)進(jìn)行合并,最終得到一個(gè)單一的結(jié)果。例如,我們要對(duì)一個(gè)序列中的所有數(shù)字進(jìn)行求和,可以使用下面的代碼:

import functools

def addition(a, b):
    return a+b

numbers = [1, 2, 3, 4, 5]

print(`functools`.reduce(addition, numbers)) # 輸出 15

functools.lru_cache:

該函數(shù)可以為函數(shù)添加一個(gè) LRU 緩存,最近最少使用緩存,以提高函數(shù)調(diào)用效率。所以在需要重復(fù)調(diào)用、計(jì)算,但返回值較為穩(wěn)定的函數(shù)中使用該裝飾器后,可大幅提高程序執(zhí)行效率。

import functools

@functools.lru_cache(maxsize=128)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

functools.wraps:

該函數(shù)可以將一個(gè)函數(shù)的元數(shù)據(jù),如 docstring, name, module, annotations 等,拷貝到被裝飾函數(shù)中。

import functools

def my_decorator(func):
    @`functools`.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@my_decorator
def greet(name):
    """Greet someone by name."""
    print(f"Hello, {name}!")

print(greet.__name__) # 輸出 greet
print(greet.__doc__) # 輸出 Greet someone by name.

functools.cached_property

緩存一個(gè)對(duì)象的屬性值。當(dāng)屬性訪問(wèn)時(shí),如果值不存在,則調(diào)用指定的方法獲取該值,并將其存儲(chǔ)在對(duì)象實(shí)例中,下一次訪問(wèn)時(shí)可以直接返回存儲(chǔ)在對(duì)象中的值,而不需要重新計(jì)算。

import functools

class MyClass:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    @functools.cached_property
    def my_property(self):
        print("Calculating my_property")
        return self.x + self.y

obj = MyClass(1, 2)
print(obj.my_property) # 輸出 3
print(obj.my_property) # 輸出 3,不再計(jì)算

functools.singledispatch

實(shí)現(xiàn)基于參數(shù)類型的多態(tài)功能。可以使用 singledispatch 修飾默認(rèn)方法,從而實(shí)現(xiàn)函數(shù)在不同參數(shù)下的不同行為。

import functools

@functools.singledispatch
def calculate_area(shape):
    raise NotImplementedError(f"Unsupported shape: {shape!r}")

@calculate_area.register
def _(rectangle):
    return rectangle.width * rectangle.height

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

rec = Rectangle(3, 4)
print(calculate_area(rec)) # 輸出 12

除了上述常用函數(shù)外,還有其他一些有用的函數(shù),如 functools.partialmethod、``functools.total_ordering等,它們均可以幫助開(kāi)發(fā)者更加方便地編寫(xiě)出更高效、更易維護(hù)的Python` 代碼。

總結(jié)

通過(guò)本文的學(xué)習(xí),我們了解了functools模塊的主要功能,包括偏函數(shù)、裝飾器、緩存、組合等。這些功能可以幫助我們更好地編寫(xiě)和優(yōu)化Python代碼,提高編程效率。作為Python開(kāi)發(fā)者,我們應(yīng)該充分利用functools模塊,將其融入到我們的編程實(shí)踐中,從而編寫(xiě)出更加簡(jiǎn)潔、高效的代碼。

責(zé)任編輯:趙寧寧 來(lái)源: python學(xué)習(xí)之旅
相關(guān)推薦

2024-08-19 00:35:00

Pythondict遍歷列表推導(dǎo)式

2024-03-19 00:10:00

aiofilesPython開(kāi)發(fā)

2018-05-08 14:58:07

戴爾

2019-04-19 08:47:00

前端監(jiān)控數(shù)據(jù)

2016-06-30 16:54:49

UCloud愛(ài)數(shù)云計(jì)算

2025-04-24 08:40:00

JavaScript代碼return語(yǔ)句

2023-09-12 16:20:04

邊緣AI深度學(xué)習(xí)

2011-07-21 13:52:43

組策略網(wǎng)絡(luò)打印機(jī)

2015-04-02 12:42:26

HDFS分層存儲(chǔ)高效

2010-12-23 15:55:00

上網(wǎng)行為管理

2018-10-23 15:20:29

SparkShuffleSpark SQL

2024-04-26 07:54:07

ZustandReact狀態(tài)管理庫(kù)

2015-09-30 14:22:44

Qlik數(shù)據(jù)

2011-08-29 09:33:48

2010-12-12 09:40:00

Android UI設(shè)

2015-12-31 11:57:17

華為eLTE物聯(lián)網(wǎng)

2024-06-24 00:05:00

Python代碼

2015-03-16 16:56:54

開(kāi)發(fā)技巧應(yīng)用孤島PaaS

2010-10-18 14:59:05

電子政務(wù)平臺(tái)

2024-12-10 08:00:00

C++CRTP函數(shù)
點(diǎn)贊
收藏

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