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))
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()))
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
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 = 'Convert base 2 string to an int.' >>> basetwo('10010') 18
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 'Calling decorated function' ... return f(*args, **kwds) ... return wrapper >>> @my_decorator ... def example(): ... """Docstring""" ... print 'Called example function' >>> example() Calling decorated function Called example function >>> example.name 'example' >>> example.doc 'Docstring'
【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!