裝飾器使用案例

2021-08-22 00:27:17 字數 2923 閱讀 8325

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import math

import datetime

from pandas import dataframe,series

from copy import deepcopy

import seaborn

deftimer

(func):

""" 乙個裝飾器,用來裝飾test_data_gen()

使test_data_gen()成為乙個帶日期的資料

返回值為乙個dataframe

"""defdeco

(*args,**kwargs):

res=func(*args,**kwargs)

date_need=

start_dt = datetime.datetime(2017, 1, 1)

interval = datetime.timedelta(seconds=300)

for i in range(len(res)):

df = dataframe(res,index = date_need[0:len(res)],columns=["data"])

return df

return deco

@timer

deftest_data_gen

(num_pi,num_ex,num_gap,num_bk):

""" num_pi為要產生幾個π的sin資料

num_ex為異常點的個數

num_gap為段缺失資料的個數

num_bk為單個缺失值的個數

"""if (num_pi>0) :

num_point=72*num_pi

x=np.linspace(0,np.pi*num_pi,num_point)

signal1=[(math.sin(i)+15) for i in x] #產生測試用的num_pi個sin資料

noise=np.random.normal(0,0.05,num_point)#numpy.random.normal(雜訊均值, 雜訊標準差, 雜訊的shape)

signal1=signal1+noise#在sin資料上新增雜訊

else:

print("please input valid num_pi")

return

if (num_ex>0) :

#隨機新增異常值

point_ex=

for i in range(num_ex):

for _ in point_ex:

signal1[_]=signal1[_]*1.8

else:

pass

if (num_gap>0) :

#隨機新增段資料缺失

longth_gap=np.random.randint(15)+5

#缺口大小5~20

point_gap= #缺口的位置

for i in range(num_gap):

for i in point_gap:

for j in range(longth_gap):

signal1[i+j]=none

else:

pass

if (num_bk>0) :

#隨機新增單點缺失值

point_break=

for i in range(num_bk):

for _ in point_break:

signal1[_]=none

else:

pass

return signal1

@timer

defpressure_below_timer

(df,standard):

""" args為一組壓力資料

standard是服務標準

返回值為低於服務標準的概率,壓力資料的均值和方差

"""args=df.iloc[:,-1]

args2=deepcopy(args)

k=0for i in range(len(args)):

if args[i] 1

else:

args2[i]=none

percent_below=k/len(args)

data_mean=np.mean(args)

data_std=np.std(args)

if(percent_below>0.1):#壓力出現10%的概率不合格則認為該點壓力不合格

print("壓力不足,需要增壓")

return args2

@timer

defstandard_line

(standard,args):

""" 服務基準線

"""return [standard]*len(args)

if __name__ == '__main__':

standard=14.5

#人為設定的服務基準

df=test_data_gen(4,0,0,0)

df2=pressure_below_timer(df,standard)

df_s=standard_line(standard,df)

plt.figure(figsize=(10,5))

plt.plot(df,'b')

plt.plot(df2,'r')

plt.plot(df_s,'r')

plt.show()

由於test_data_gen()、pressure_below_timer()和standard_line()三個函式都需要新增日期資料並轉換為dateframe,為了使**更簡潔,使用裝飾器裝飾這三個函

裝飾器使用

裝飾器本質上是乙個 python 函式或類,它可以讓其他函式或類在不需要做任何 修改的前提下增加額外功能,裝飾器的返回值也是乙個函式 類物件。它經常用於有切面需求的場景,比如 插入日誌 效能測試 事務處理 快取 許可權校驗等場景,裝飾器是解決這類問題的絕佳設計。有了裝飾器,我們就可以抽離出大量與函式...

python裝飾器使用

根據裝飾器有參 無參,函式有參 無參,組合共4種 無參裝飾器 包裝無引數函式 不需要針對引數進行處理和優化 def decorator func 自定義處理邏輯 pass decorator def foo pass這樣呼叫foo 的時候等價於 foo decorator foo foo 無參裝飾器...

python函式裝飾器使用詳解

def hint func def args,kwargs print is running format func.name return func args,kwargs hint defhello print hello 我們現在對hello已經進行了裝飾,當我們呼叫hello 時,我們可以看...