我有一个Pandas时间序列,我希望"格式化#34;,从某种意义上说,我有一个天数的偏移量,我想只输出偏移量以上的天数。实际上,这可以通过一行简单的代码完成:
series = series.iloc[offset:]
但我有很多情况需要这样做,所以我更喜欢更模块化的东西。我刚刚开始进入装饰器,所以我仍然觉得它们很难掌握,但是,我想要写一个装饰器如下:
def apply_offset(series, days):
def adj(*args, **kwargs):
return series(*args, **kwargs).iloc[days:]
return adj
然后将其应用于某个返回如下系列的函数:
@apply_offset(200)
def ret_series(*args, **kwargs):
# returns a series
因此,在上面的示例中,系列应用了200天的偏移量。现在,当解释器到达装饰时,这会引发错误,即:
TypeError: apply_offset() missing 1 required positional argument: 'offset'
我做错了什么?
答案 0 :(得分:2)
装饰者必须接受函数作为唯一的参数。但是你可以通过用你需要的参数构造它来返回这样的装饰器函数。
def apply_offset(days):
def wrapper(function):
def wrapped(*args, **kwargs):
return function(*args, **kwargs).iloc[days:]
return wrapped
return wrapper