Heim > Backend-Entwicklung > Python-Tutorial > Beispiel für eine Funktion des Analyse-Functools-Moduls

Beispiel für eine Funktion des Analyse-Functools-Moduls

Y2J
Freigeben: 2017-05-09 14:54:09
Original
1655 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Analyse allgemeiner Funktionen des functools-Moduls in Python vor. Er erläutert die Verwendung von functools.cmp_to_key, functools.total_ordering, functools.partial, functools.update_wrapper und functools.wraps Wer es braucht, kann darauf verweisen

Das mit Python gelieferte Functools-Modul bietet einige häufig verwendete Funktionen höherer Ordnung, bei denen es sich um spezielle Funktionen handelt, die zur Verarbeitung anderer Funktionen verwendet werden. Mit anderen Worten: Mit diesem Modul kann das aufrufbare -Objekt verarbeitet werden.

Funktionen des Functools-ModulsÜbersicht

  • functools.cmp_to_key(func)

  • functools.total_ordering(cls)

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

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

  • functools.update_wrapper(wrapper, packet[, zugewiesen][, aktualisiert])

  • functools.wraps(wrapped[, zugewiesen][, aktualisiert])

functools.cmp_to_key()

Syntax:

functools.cmp_to_key(func) 

Diese Funktion wird verwendet, um Vergleichsfunktionen im alten Stil in Schlüsselwortfunktionen umzuwandeln.

Vergleichsfunktion im alten Stil: empfängt zwei Parameter und gibt das Vergleichsergebnis zurück. Wenn der Rückgabewert kleiner als Null ist, ist ersterer kleiner als letzterer, ist der Rückgabewert größer als Null, ist das Gegenteil der Fall, und wenn der Rückgabewert gleich Null ist, sind beide gleich.

Schlüsselwortfunktion: empfängt einen Parameter und gibt das entsprechende vergleichbare Objekt zurück. Beispielsweise können sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby() alle sein Wird als Schlüsselwortfunktion verwendet.

In Python 3 gibt es viele Stellen, die die alten Vergleichsfunktionen nicht mehr unterstützen. Derzeit können Sie cmp_to_key() für die Konvertierung verwenden.

Beispiel:

sorted(iterable, key=cmp_to_key(cmp_func))
Nach dem Login kopieren

functools.total_ordering()

Syntax:

functools.total_ordering(cls)

Dies ist ein Klassendekorator, der zur automatischen Implementierung von Vergleichsoperationen von Klassen verwendet wird.

Wir müssen nur die Methode eq() und eine der folgenden Methoden lt(), le(), gt(), ge() in der Klasse implementieren, dann kann uns total_ordering() automatisch helfen Implementieren Sie die verbleibenden Vergleichsoperationen.

Beispiel:

@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()))
Nach dem Login kopieren

functools.reduce()

Syntax:

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

Diese Funktion ist dieselbe wie die in Python integrierte Funktion Reduce() und wird hauptsächlich zum Schreiben von Code verwendet, der mit Python 3 kompatibel ist.

functools.partial()

Syntax:

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

Die Funktion gibt a zurück Da es sich um ein Teilobjekt handelt, entspricht der Aufruf dieses Objekts dem Aufruf der Funktion func und der Übergabe der Positionsparameter args und Schlüsselwortparameter keywords. Wenn das Objekt mit Positionsparametern aufgerufen wird, werden diese Parameter zu args hinzugefügt. Wenn Schlüsselwortargumente übergeben werden, werden sie den Schlüsselwörtern hinzugefügt. Die äquivalente Implementierung der Funktion

partial() sieht ungefähr wie folgt aus: Die Funktion

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
Nach dem Login kopieren

partial() wird hauptsächlich verwendet, um einige Parameter einer Funktion „einzufrieren“ und einen Parameter mit zurückzugeben weniger Parameter, Verwendung einfacherer Funktionsobjekte.

Beispiel:

>>> 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
Nach dem Login kopieren

functools.update_wrapper()

Syntax:

functools.update_wrapper(wrapper , Wrapper[, zugewiesen][, aktualisiert])

Diese Funktion wird verwendet, um die Wrapper-Funktion (Wrapper) zu aktualisieren, sodass sie wie die Originalfunktion aussieht. Der optionale Parameter ist ein Tupel, das zugewiesene Tupel gibt das -Attribut an, das direkt durch den Wert der ursprünglichen Funktion ersetzt werden soll, und das aktualisierte Tupel gibt das Attribut an, das gegenüber der ursprünglichen Funktion aktualisiert werden soll. Die Standardwerte dieser beiden Parameter sind Konstanten auf Modulebene: WRAPPER_ASSIGNMENTS bzw. WRAPPER_UPDATES. Ersteres spezifiziert die direkte Zuweisung der Namens-, module- und doc-Attribute der Wrapper-Funktion, während letzteres die Aktualisierung des dict-Attributs der Wrapper-Funktion angibt. Diese Funktion wird hauptsächlich bei der Definition von Dekoratorfunktionen verwendet und vor der Wrapper-Funktion platziert. Wenn die Wrapper-Funktion nicht aktualisiert wird, werden die Metainformationen der dekorierten Funktion zu den Metainformationen der Wrapper-Funktion und nicht zu den Metainformationen der ursprünglichen Funktion.

functools.wraps()


Syntax:

functools.wraps(wrapped[, zugewiesen][, aktualisiert])


wraps() vereinfacht den Aufruf der Funktion update_wrapper(). Es entspricht partiellem(update_wrapper, Wrapped=wrapped, zugewiesen, aktualisiert=aktualisiert).

Beispiel:

Wenn diese Funktion nicht verwendet wird, wird der Funktionsname im Beispiel zum Wrapper und die Dokumentation (Docstring) der ursprünglichen Funktion example() geht verloren .
>>> 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;
Nach dem Login kopieren

【Verwandte Empfehlungen】

1. Python kostenloses Video-Tutorial

2. Python-Grundlagen-Einführungs-Tutorial

3. Python trifft auf Datenerfassung

Das obige ist der detaillierte Inhalt vonBeispiel für eine Funktion des Analyse-Functools-Moduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage