[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.

Einführung

Macht ihr "Dekorateure"? Peinlicherweise habe ich die Details ** heute ** gelernt. Auch wenn ich seine Existenz bemerkt habe, habe ich es bis heute ignoriert, aber seit ich es studiert habe, schreibe ich mit der Absicht, etwas auszugeben.

Was ich gemacht habe

Ich habe sofort versucht, so etwas zu machen.

deco_test.py


def decof(Func,*_args,**_kwargs):
    def _deco(func):
        def wrapper(*args,**kwargs):
            return Func(func(*args,**kwargs),*_args,**_kwargs)
        return wrapper
    return _deco

def decob(Func,*_args,**_kwargs):
    def _deco(func):
        def wrapper(*args,**kwargs):
            return Func(*_args,func(*args,**kwargs),**_kwargs)
        return wrapper
    return _deco

Grob gesagt können Sie eine Funktion ** erstellen, mit der die angegebene Funktion den Rückgabewert der zu verpackenden Funktion erhält. Es gibt zwei, da es ordnungsgemäß verwendet wird, je nachdem, ob der Rückgabewert als erstes Argument (decof ()) oder als letztes Argument (decob ()) empfangen wird. Es ist schwer in Worten zu verstehen. Wenn ich es demonstriere,

deco_test.py


import numpy as np
from functools import reduce
from operator import sub

@decob(reduce,sub)
@decof(np.array,dtype=int)
@decof(list)
@decof(str)
@decob(pow,2)
@decof(pow,2)
def add(a,b):return a+b

print(add(3,4))

Ausgabe


-55
#3+4 -> 7**2 -> 2**49 -> '562949953421312' -> ['5', '6', '2', '9', '4', '9', '9', '5', '3', '4', '2', '1', '3', '1', '2']
# -> array([5, 6, 2, 9, 4, 9, 9, 5, 3, 4, 2, 1, 3, 1, 2]) -> 5-6-2-9-4-9-9-5-3-4-2-1-3-1-2 -> -55

Sie können ein solches Funktionsrelais deutlich ausdrücken (?). das ist alles.

Zusammenfassung

Ich habe es bis jetzt vermieden, aber es scheint ziemlich praktisch zu sein, je nachdem, wie es verwendet wird. Wenn Sie also wieder etwas einfallen lassen, möchte ich es hier vorstellen. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe einen Python-Text gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Erstellt einen Toolsver, der Betriebssystem, Python, Module und Toolversionen an Markdown ausspuckt
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe mit Python einen Daemon erstellt
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe einen verstümmelten Generator erstellt, der Ihre Lieblingssätze von UTF-8 bis Shift-JIS (cp932) in Python codiert
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (4)
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (2)
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich habe eine Frage! (Python, Django) Einfach
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (5)
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Hex-Map erstellt
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (3)
Ich habe Othello dazu gebracht, Kindern Python3 beizubringen (1)
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe einen Passwortgenerator erstellt, um Kindern Python3 beizubringen (Bonus) * Vollständig neu erstellt
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Verwendung von hmmlearn, einer Python-Bibliothek, die versteckte Markov-Modelle realisiert
Ich habe eine Bibliothek konoha gemacht, die den Tokenizer auf ein schönes Gefühl umstellt
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ein Memorandum, weil ich beim Versuch, MeCab mit Python zu verwenden, gestolpert bin
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
[Python] Ich habe eine Funktion erstellt, die auch reguläre Ausdrücke verwenden kann, die Zeichenfolgen auf einmal ersetzen.
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Python Ich weiß nicht, wie ich den Druckernamen bekomme, den ich normalerweise benutze.