装饰器
def f1(func):
print('f1 runing')
def f2(y):
print('f2 running')
return func(y) +1
return f2
@f1
def gun(m):
print('gun runing')
return m*m
n=gun(5)
print(n)
import time
def run_time(func):
def new_fun(*args,**kwargs):
t0 = time.time()
print('star time: %s'%(time.strftime('%X',time.localtime())) )
back = func(*args,**kwargs)
print('end time: %s'%(time.strftime('%X',time.localtime())) )
print('run time: %s'%(time.time() - t0))
return back
return new_fun
@run_time
def test2(n):
for i in range(1,n):
for j in range(1,i+1):
print('%dx%d=%2s'%(j,i,i*j),end = ' ')
print ()
n = test2(10)
例子
"""
def login():
print('登录成功')
"""
import time
def login_required(func):
def wrpper(*args,**kwargs):
print('正在验证...')
time.sleep(5)
return func(*args,**kwargs)
return wrpper
@login_required
def login():
print('登录成功')
login()
类作为装饰器
class Tset_Class():
def __init__(self,func):
print('正在实例化')
self.func = func
def __call__(self, *args, **kwargs):
print('这是call方法')
return self.func
@Tset_Class
def test():
print('这是一个测试函数')
n = test()
n()
类中常见的几种装饰器
class Test():
aa = 123
def __init__(self,name):
self.__name = name
@property
def get_name(self):
print( self.__name)
return self.__name
@get_name.setter
def get_name(self,name):
self.__name = name
@property
def po(self):
print('asdfasdfasdfasdaf')
@staticmethod
def test():
print('staticmethod func')
@classmethod
def show(cls):
print(cls.aa)
print('classmethod func ')
t = Test('jianeng')
t.show()
t.test()
Test.test()
Test.show()
t.show()