Je veux mémoriser, y compris les arguments de mots clés de Python

Les décorateurs de mémorisation suivants sont introduits dans Pythonwiki.

# note that this decorator ignores **kwargs
def memoize(obj):
    cache = obj.cache = {}

    @functools.wraps(obj)
    def memoizer(*args, **kwargs):
        if args not in cache:
            cache[args] = obj(*args, **kwargs)
        return cache[args]
    return memoizer

Cependant, comme indiqué dans le commentaire, il semble qu'il ne supporte pas les kwargs. Traitons-y.

# do not use "self" for a name of argument.
import inspect
def memoize(obj):
    cache = obj.cache = {}

    @functools.wraps(obj)
    def memoizer(*args, **kwargs):
        argdict = inspect.getcallargs(obj, *args, **kwargs)
        argdict.pop('self', None) # if obj is a bound method, arguments includes "self"
        argset = frozenset(argdict.iteritems()) # for Python3, use dict.items() instead
        if argset not in cache:
            cache[argset] = obj(*args, **kwargs)
        return cache[argset]
    return memoizer

Le but est d'utiliser la bibliothèque standard inspect. inspect.getcallargs ()

>>> def f(a, b, c=10):
...     pass
... 
>>> inspect.getcallargs(f, 1, 2) 
{'a': 1, 'c': 10, 'b': 2}

Comme, il transforme le nom de l'argument et l'argument dans un dictionnaire. inspect est utile à bien des égards.

Recommended Posts

Je veux mémoriser, y compris les arguments de mots clés de Python
Je veux déboguer avec Python
Je veux utiliser jar de python
Je veux créer un environnement Python
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Je veux faire le test de Dunnett en Python
Je veux utiliser MATLAB feval avec python
Je veux créer une fenêtre avec Python
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je veux faire un jeu avec Python
Je veux fusionner des dictionnaires imbriqués en Python
Je souhaite utiliser le répertoire temporaire avec Python2
Je veux utiliser le solveur ceres de python
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux créer du code C ++ à partir de code Python!
Je veux écrire dans un fichier avec Python
Je veux afficher la progression en Python!
Je veux écrire en Python! (1) Vérification du format de code
Même les débutants veulent dire "Je comprends parfaitement Python"
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux gérer l'optimisation avec python et cplex
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
[Introduction à Udemy Python3 + Application] 53. Dictionnaire des arguments de mots-clés
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
[Python] Je veux faire d'une liste imbriquée un taple
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux AWS Lambda avec Python sur Mac!
Je veux utiliser le jeu de données R avec python
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux faire quelque chose avec Python à la fin
Je veux manipuler des chaînes dans Kotlin comme Python!
Je veux résoudre SUDOKU
Arguments de mots-clés pour les fonctions Python
Je veux pouvoir analyser des données avec Python (partie 3)
Je veux initialiser si la valeur est vide (python)
Je souhaite spécifier une autre version de Python avec pyvenv
maya Python Je veux réparer à nouveau l'animation cuite.
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux faire quelque chose comme sort uniq en Python
[Python] Je souhaite obtenir un ensemble commun entre numpy
Je veux démarrer beaucoup de processus à partir de python
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux assister automatiquement à des cours en ligne avec Python + Selenium!
[Python] Je souhaite utiliser l'option -h avec argparse
Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé
Je souhaite envoyer un message de Python à LINE Bot