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