文中内容是我近期学习python所留下来的笔记,上传平台是为了保存防止误删造成笔记丢失,跪求浏览笔记的朋友给个赞
import time
def f1():
print('this is a function')
#f1()只能打印一个语句,当我们想要加入打印时间这一功能并不改变f1()函数内部的实现,这时装饰器就可以做到
def decorator(func):
def wrapper():
func()
print(time.time())
return wrapper
r=decorator(f1)
r()
#当然函数式编程也能做到
def f2(func):#将f1()当成一个参数传入
print(time.time())
func()
f2(f1)
#当然装饰器还有更方便的方法使之继续调用f1()的情况下也能增加功能:在函数的定义前加上@装饰器然后直接调用该函数并增加功能
#例如:
def decor(func):
def wrap():
print(time.time())
func()
return wrap
@decor
def f3():
print('hello world')
f3()
#以上的装饰器都是没有参数的形式,当有参数传入的时候怎么办
#例如要往f4()后面加上一句话‘你好,世界’
def dec1(func):
def wap1(addition):
print(time.time())
func(addition)
return wap1
@dec1
def f4(addition):
print('hello world'+addition)
f4('你好,世界')
#若要传递多个函数则添加在装饰器函数中的参数名改成可变参数:*+参数名;;;用于解决函数列表不知一个参数
def dec2(func):
def wap(*addition):
print(time.time())
func(*addition)
return wap
@dec2
def f5(addition1,addition2,addition3):
print('hello world'+addition1+addition2+addition3)
f5('你好,世界','我热爱生活','我想获得成功和幸福')
#若传入的参数为关键字参数呢?我们尝试可知关键字参数不能用可变参数来表示
#所以我们应该在装饰器里加上关键字函数
#例如
def dec3(func):
def wap2(*addition,**kw):
print(time.time())
func(*addition,**kw)
return wap2
@dec3
def f6(addition1,addition2,**kw):
print('hello world'+addition1+addition2)
print(kw)
f6('你好,世界','我热爱生活',a=1,b=2,c=3)#这里会以字典的形式将关键字参数打印出