[英]Python decorator that takes arbitrary number of functions as arguments and returns composition of functions
我正在嘗試編寫一個裝飾器,該裝飾器將任意數量的函數用作位置參數,然后將這些函數與正在裝飾的函數組成。
從概念上講,我正在嘗試這樣做:
@format(f1, f2, f3)
def f0(param):
return value
f0(arg)
應該評估為f3(f2(f1(f0(arg))))
這是我一直在努力說明這個概念的一個簡單示例。
def lc(s):
s = s.lower()
return s
def punc(s):
if s[-1] != ".":
s = s + "."
return s
else:
return s
def cap(s):
s = s[0].upper() + s[1:]
return s
def format(*args):
def wrapper(func, *a):
for f in args:
func = f(func)
return func
return wrapper
@format(lc, punc, cap)
def example_func(param):
return param
我期望的是:
f0("MY TEST STRING")
My test string.
我收到以下錯誤消息:
AttributeError: 'function' object has no attribute 'lower'
可能有一種更簡單的方法來執行此操作,例如將函數直接傳遞到原始函數中而不使用裝飾器,但是我正在尋找一種以這種方式專門使用裝飾器的解決方案。 謝謝。
您需要使用“帶有參數的裝飾器”模式,如下所示:
def format(*fs):
def deco(f):
def wrapper(x):
val = f(x)
for func in fs:
val = func(val)
return val
return wrapper
return deco
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.