[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.

introduction

Faites-vous des «décorateurs»? Embarrassant, j'ai appris les détails ** aujourd'hui **. Même si j'ai remarqué son existence, je l'ai ignorée jusqu'à aujourd'hui, mais depuis que je l'ai étudiée, j'écris avec l'intention de sortir quelque chose.

Ce que j'ai fait

Immédiatement, j'ai essayé de faire quelque chose comme ça.

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

En gros, vous pouvez créer une fonction ** qui permet à la fonction spécifiée de recevoir la valeur de retour de la fonction à encapsuler. Il y en a deux car il est utilisé correctement selon que la valeur de retour est reçue comme premier argument (decof ()) ou comme dernier argument (decob ()). C'est difficile à comprendre avec des mots, alors quand je le démontre,

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

production


-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

Vous pouvez exprimer clairement (?) Un relais de fonction comme celui-ci. c'est tout.

Résumé

Je l'ai évité jusqu'à présent, mais cela semble assez pratique en fonction de la façon dont il est utilisé, donc si vous trouvez quelque chose à nouveau, j'aimerais le présenter ici. Merci d'avoir lu jusqu'au bout.

Recommended Posts

[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé un module Python pour traduire les commentaires
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai fait un texte Python
J'ai créé un package pour filtrer les séries chronologiques avec python
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai créé un démon avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai fait Othello pour enseigner Python3 aux enfants (4)
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
J'ai fait Othello pour enseigner Python3 aux enfants (2)
Je veux utiliser jar de python
Je veux créer un environnement Python
J'ai une question! (Python, django) Facile
J'ai fait Othello pour enseigner Python3 aux enfants (5)
J'ai fait un script pour afficher des pictogrammes
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait Othello pour enseigner Python3 aux enfants (3)
J'ai fait Othello pour enseigner Python3 aux enfants (1)
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
J'ai fait un générateur de mot de passe pour enseigner Python3 aux enfants (bonus) * Complètement refait
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
[Python] J'ai créé un utilitaire qui peut accéder au type dict comme un chemin
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
Comment utiliser hmmlearn, une bibliothèque Python qui réalise des modèles de Markov cachés
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
Un mémorandum parce que j'ai trébuché en essayant d'utiliser MeCab avec Python
[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
[Python] J'ai créé une fonction qui peut également utiliser des expressions régulières qui remplacent toutes les chaînes de caractères à la fois.
J'ai créé un fichier de dictionnaire python pour Neocomplete
python Je ne sais pas comment obtenir le nom de l'imprimante que j'utilise habituellement.