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

WBOY
Libérer: 2022-07-27 17:27:27
avant
2769 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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']
Copier après la connexion

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()   # 清空缓存
Copier après la connexion

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>
Copier après la connexion

【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!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal