Maison  >  Article  >  développement back-end  >  Exemple de fonction du module functools d'analyse

Exemple de fonction du module functools d'analyse

Y2J
Y2Joriginal
2017-05-09 14:54:091623parcourir

Cet article présente principalement l'analyse des fonctions courantes du module functools en Python. Il explique respectivement l'utilisation de functools.cmp_to_key, functools.total_ordering, functools.reduce, functools.partial, functools.update_wrapper et functools.wraps. qui en a besoin Vous pouvez vous référer à

Le module functools fourni avec Python fournit des fonctions d'ordre supérieur couramment utilisées, qui sont des fonctions spéciales utilisées pour traiter d'autres fonctions. En d’autres termes, ce module peut être utilisé pour traiter l’objet appelable .

Fonctions du module functoolsVue d'ensemble

  • functools.cmp_to_key(func)

  • functools.total_ordering(cls)

  • functools.reduce(function, iterable[, initializer])

  • functools.partial (func[, args][, *keywords])

  • functools.update_wrapper(wrapper, enveloppé[, assigné][, mis à jour])

  • functools.wraps(wrapped[, assigné][, mis à jour])

functools.cmp_to_key()

Syntaxe :

functools.cmp_to_key(func) 

Cette fonction est utilisée pour convertir des fonctions de comparaison à l'ancienne en fonctions de mots-clés.

Fonction de comparaison à l'ancienne : reçoit deux paramètres et renvoie le résultat de la comparaison. Si la valeur de retour est inférieure à zéro, la première est inférieure à la seconde, si la valeur de retour est supérieure à zéro, l'inverse est vrai et si la valeur de retour est égale à zéro, les deux sont égaux.

Fonction Mot-clé : reçoit un paramètre et renvoie son objet comparable correspondant. Par exemple, sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby() peuvent tous être utilisé comme fonction de mots-clés.

Dans Python 3, de nombreux endroits ne prennent plus en charge les anciennes fonctions de comparaison. À l'heure actuelle, vous pouvez utiliser cmp_to_key() pour la conversion.

Exemple :

sorted(iterable, key=cmp_to_key(cmp_func))

functools.total_ordering()

Syntaxe :

functools.total_ordering(cls) 

Il s'agit d'un décorateur de classe utilisé pour implémenter automatiquement des opérations de comparaison de classes.

Nous avons seulement besoin d'implémenter la méthode eq() et l'une des méthodes suivantes lt(), le(), gt(), ge() dans la classe, alors total_ordering() peut automatiquement nous aider implémentez-le Les opérations de comparaison restantes.

Exemple :

@total_ordering
class Student: 
  def eq(self, other):
    return ((self.lastname.lower(), self.firstname.lower()) ==
        (other.lastname.lower(), other.firstname.lower()))
  def lt(self, other):
    return ((self.lastname.lower(), self.firstname.lower()) <
        (other.lastname.lower(), other.firstname.lower()))

functools.reduce()

Syntaxe :

functools.reduce(function, iterable[, initializer]) 

Cette fonction est identique à la fonction réduire() intégrée de Python et est principalement utilisée pour écrire du code compatible avec Python 3.

functools.partial()

Syntaxe :

functools.partial(func[, *args][, **keywords]) 

La fonction renvoie un objet partiel, l'effet de l'appel de cet objet équivaut à appeler la fonction func et à transmettre les paramètres de position args et les paramètres de mots-clés mots-clés. Si l'objet est appelé avec des arguments de position, ces arguments seront ajoutés à args. Si des arguments de mots-clés sont transmis, ils seront ajoutés aux mots-clés. L'implémentation équivalente de la fonction

partial() est à peu près la suivante : la fonction

def partial(func, *args, **keywords): 
  def newfunc(*fargs, **fkeywords):
    newkeywords = keywords.copy()
    newkeywords.update(fkeywords)
    return func(*(args + fargs), **newkeywords)
  newfunc.func = func
  newfunc.args = args
  newfunc.keywords = keywords
  return newfunc

partial() est principalement utilisée pour "geler" certains paramètres d'une fonction, en renvoyant un paramètre avec moins de paramètres, en utilisant des objets fonction plus simples.

Exemple :

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.doc = &#39;Convert base 2 string to an int.&#39;
>>> basetwo(&#39;10010&#39;)
18

functools.update_wrapper()

Syntaxe :

functools.update_wrapper(wrapper , enveloppé[, assigné][, mis à jour])

Cette fonction est utilisée pour mettre à jour la fonction wrapper (wrapper) afin qu'elle ressemble à la fonction d'origine. Le paramètre facultatif est un tuple, le tuple attribué spécifie l'attribut à remplacer directement par la valeur de la fonction d'origine, et le tuple mis à jour spécifie l'attribut à mettre à jour par rapport à la fonction d'origine. Les valeurs par défaut de ces deux paramètres sont des constantes au niveau du module : respectivement WRAPPER_ASSIGNMENTS et WRAPPER_UPDATES. Le premier spécifie l'affectation directe des attributs name, module et doc de la fonction wrapper, tandis que le second spécifie la mise à jour de l'attribut dict de la fonction wrapper. Cette fonction est principalement utilisée dans la définition des fonctions de décorateur et se place avant la fonction wrapper. Si la fonction wrapper n'est pas mise à jour, les métainformations de la fonction décorée deviendront les métainformations de la fonction wrapper, et non les métainformations de la fonction d'origine.

functools.wraps()


Syntaxe :

functools.wraps(wrapped[, assigné][, mis à jour])


wraps() simplifie l'appel de la fonction update_wrapper(). C'est équivalent à partial(update_wrapper, enveloppé=wrapped, assigné, mis à jour=mis à jour).

Exemple :

Si cette fonction n'est pas utilisée, le nom de la fonction dans l'exemple deviendra wrapper et la documentation (docstring) de la fonction originale example() sera perdue.
>>> from functools import wraps
>>> def my_decorator(f):
...   @wraps(f)
...   def wrapper(*args, **kwds):
...     print &#39;Calling decorated function&#39;
...     return f(*args, **kwds)
...   return wrapper

>>> @my_decorator
... def example():
...   """Docstring"""
...   print &#39;Called example function&#39;

>>> example()
Calling decorated function 
Called example function 
>>> example.name
&#39;example&#39; 
>>> example.doc
&#39;Docstring&#39;

【Recommandations associées】

1. Tutoriel vidéo gratuit sur Python

2 Tutoriel d'introduction de base de Python

3.

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:
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