作用:扩展原函数的功能,使用原函数名进行调用
原型-使用语法糖之前
import time
def func():
print('大家好')
time.sleep(0.1)
def timmer(f): #装饰器函数
def inner():
start = time.time()
f()
end = time.time()
print(end - start)
return inner
func=timmer(func) #func获得inner地址
func() #其实执行的是inner()
使用语法糖之后—原函数没有返回值
import time
def timmer(f): #装饰器函数
def inner():
start = time.time()
f()
end = time.time()
print(end - start)
return inner
@timmer #语法糖 相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面
def func(): #被装饰的函数
print('大家好')
time.sleep(0.1)
func() #其实执行的是inner()
原函数带返回值
import time
def timmer(f): #装饰器函数
def inner():
start = time.time()
ret=f()
end = time.time()
print(end - start)
return ret
return inner
@timmer #语法糖 相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面
def func(): #被装饰的函数
print('大家好')
time.sleep(0.1)
return '新年好'
x=func() #其实执行的是inner()
print(x)
原函数带参数
import time
def timmer(f): #装饰器函数
def inner(a):
start = time.time()
ret=f(a)
end = time.time()
print(end - start)
return ret
return inner
@timmer #语法糖 相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面
def func(a): #被装饰的函数
print('大家好',a)
time.sleep(0.1)
return '新年好'
x=func(100) #其实执行的是inner()
print(x)
自定义属性--类函数以属性形式进行访问
把类中的函数隐藏为属性@property
from math import pi
class Circle:
def __init__(self,r):
self.r=r
def zoucan(self):
return 2*pi*self.r
@property #把下面的函数伪装成属性,只能用于类中的函数并没有参数的函数
def area(self):
return self.r**2*pi
@area.setter #可以修改伪装成属性的函数中某个变量
def area(self,x): #只能有一个参数
self.r=x
c1=Circle(10)
a=c1.area
print(a)
c1.area=20
a=c1.area
print(a)