Maison >développement back-end >Tutoriel Python >Résumé de l'utilisation du module functools de Python

Résumé de l'utilisation du module functools de Python

WBOY
WBOYavant
2022-07-27 17:27:272806parcourir

Cet article vous apporte des connaissances pertinentes sur Python. Il présente principalement l'utilisation et la description du module functools de Python. Il a une bonne valeur de référence. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.

Résumé de l'utilisation du module functools de Python

【Recommandation associée : Tutoriel vidéo Python3

partial

est utilisé pour créer une fonction partielle, envelopper les paramètres par défaut dans un objet appelable et le résultat renvoyé est également un objet appelable.

Les fonctions partielles peuvent corriger certains paramètres de la fonction d'origine, ce qui facilite son appel.

from functools import partial

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

update_wrapper

Les fonctions enveloppées à l'aide de partial n'ont pas d'attributs __name__ et __doc__.

Fonction update_wrapper : copiez le __name__ et les autres attributs de la fonction encapsulée dans la nouvelle fonction. La fonction

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 consiste à copier le __name__ de la fonction décorée dans le décorateur.

C'est un wrapper sur 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

En Python2, c'est équivalent à la fonction intégrée réduire

La fonction de la fonction est de résumer une séquence dans une sortie

reduce(function, sequence, startValue)

from functools import reduce

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

cmp_to_key

Dans la liste .sort et le paramètre intégré Il y a un paramètre clé dans la fonction sorted

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

Python3 a précédemment fourni le paramètre cmp pour comparer deux éléments

La fonction cmp_to_key est utilisée pour convertir l'ancienne fonction de comparaison en une fonction clé

lru_cache

nous permet de convertir une fonction. Les valeurs de retour sont rapidement mises en cache ou non.

Ce décorateur est utilisé pour mettre en cache les résultats des appels de fonctions. Pour les fonctions qui doivent être appelées plusieurs fois et que les paramètres sont les mêmes pour chaque appel, vous pouvez utiliser ce décorateur pour mettre en cache les résultats des appels, accélérant ainsi le programme. .

Ce décorateur mettra en cache différents résultats d'appels en mémoire, vous devez donc faire attention au problème d'utilisation de la mémoire.

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

Le répartiteur unique, nouveau dans Python3.4, est utilisé pour implémenter des fonctions génériques.

Déterminez quelle fonction appeler en fonction du type d'un seul paramètre.

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>

【Recommandations associées : Tutoriel vidéo Python3

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer