Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Verwendung des Functools-Moduls von Python

Zusammenfassung der Verwendung des Functools-Moduls von Python

WBOY
WBOYnach vorne
2022-07-27 17:27:272736Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Python. Er stellt hauptsächlich die Verwendung und Beschreibung des Functools-Moduls vor. Ich hoffe, dass er für alle hilfreich ist.

Zusammenfassung der Verwendung des Functools-Moduls von Python

【Verwandte Empfehlung: Python3-Video-Tutorial

partial

wird verwendet, um eine Teilfunktion zu erstellen, die Standardparameter in ein aufrufbares Objekt zu packen und das Rückgabeergebnis ist ebenfalls ein aufrufbares Objekt.

Teilfunktionen können einige Parameter der ursprünglichen Funktion korrigieren und so den Aufruf erleichtern.

from functools import partial

int2 = partial(int, base=8)
print(int2('123'))
# 83

update_wrapper

Funktionen, die partiell umschlossen werden, haben keine __name__- und __doc__-Attribute.

update_wrapper-Funktion: Kopieren Sie den __name__ und andere Attribute der umschlossenen Funktion in die neue Funktion. Die Funktion

from functools import update_wrapper
def wrap2(func):
    def inner(*args):
        return func(*args)
    return update_wrapper(inner, func)

@wrap2
def demo():
    print('hello world')

print(demo.__name__)
# demo

wraps

warps besteht darin, den __name__ der dekorierten Funktion im Decorator zu kopieren.

Es ist ein Wrapper für update_wrapper

from functools import wraps
def wrap1(func):
    @wraps(func)    # 去掉就会返回inner
    def inner(*args):
        print(func.__name__)
        return func(*args)
    return inner

@wrap1
def demo():
    print('hello world')

print(demo.__name__)
# demo

reduce

In Python2 entspricht es der integrierten Funktion Reduce

Die Funktion der Funktion besteht darin, eine Sequenz in einer Ausgabe zusammenzufassen

reduce(function, sequence, startValue)

from functools import reduce

l = range(1,50)
print(reduce(lambda x,y:x+y, l))
# 1225

cmp_to_key

In-Liste .sort und integriert Es gibt einen Schlüsselparameter in der sortierten Funktion

x = ['hello','worl','ni']
x.sort(key=len)
print(x)
# ['ni', 'worl', 'hello']

Python3 hat zuvor den cmp-Parameter zum Vergleichen zweier Elemente bereitgestellt

cmp_to_key-Funktion wird verwendet, um die alte Vergleichsfunktion in eine Schlüsselfunktion umzuwandeln

lru_cache

erlaubt Wir konvertieren eine Funktion. Rückgabewerte werden schnell zwischengespeichert oder nicht zwischengespeichert.

Dieser Dekorator wird zum Zwischenspeichern der Aufrufergebnisse von Funktionen verwendet, die mehrmals aufgerufen werden müssen und bei denen die Parameter bei jedem Aufruf gleich sind. Sie können diesen Dekorator zum Zwischenspeichern der Aufrufergebnisse verwenden und so das Programm beschleunigen .

Dieser Dekorator speichert verschiedene Anrufergebnisse im Speicher, daher müssen Sie auf das Problem der Speichernutzung achten.

from functools import lru_cache
@lru_cache(maxsize=30)  # maxsize参数告诉lru_cache缓存最近多少个返回值
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)
print([fib(n) for n in range(10)])
fib.cache_clear()   # 清空缓存

singledispatch

Einzelner Dispatcher, neu in Python3.4, der zur Implementierung generischer Funktionen verwendet wird.

Bestimmen Sie anhand des Typs eines einzelnen Parameters, welche Funktion aufgerufen werden soll.

from functools import singledispatch
@singledispatch
def fun(text):
    print(&#39;String:&#39; + text)

@fun.register(int)
def _(text):
    print(text)

@fun.register(list)
def _(text):
    for k, v in enumerate(text):
        print(k, v)

@fun.register(float)
@fun.register(tuple)
def _(text):
    print(&#39;float, tuple&#39;)
fun(&#39;i am is hubo&#39;)
fun(123)
fun([&#39;a&#39;,&#39;b&#39;,&#39;c&#39;])
fun(1.23)
print(fun.registry)    # 所有的泛型函数
print(fun.registry[int])    # 获取int的泛型函数
# String:i am is hubo
# 123
# 0 a
# 1 b
# 2 c
# float, tuple
# {<class &#39;object&#39;>: <function fun at 0x106d10f28>, <class &#39;int&#39;>: <function _ at 0x106f0b9d8>, <class &#39;list&#39;>: <function _ at 0x106f0ba60>, <class &#39;tuple&#39;>: <function _ at 0x106f0bb70>, <class &#39;float&#39;>: <function _ at 0x106f0bb70>}
# <function _ at 0x106f0b9d8>

【Verwandte Empfehlungen: Python3-Video-Tutorial

Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung des Functools-Moduls von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen