老男孩Python全栈开发(92天全)视频教程 自学笔记16

本文深入讲解了Python中装饰器的概念及应用,包括基本装饰器的定义、带参数的装饰器和带参数的被装饰函数等内容,并通过实例展示了如何使用装饰器来增强函数的功能。

 day16课程内容:

   装饰器:

def outer():
x=10
def inner():
print(x)
return inner
outer()() #inner 是局部变量,10
闭包:如果在一个内部函数里,对外部作用域(但不是对全局作用域)的变量进行引用,那么内部函数就认为就被认为是闭包。
对修改封闭,对扩展开放,开放封闭原则!
import time
def foo():
print('foo')
time.sleep(1)
def bar():
print('bar')
time.sleep(1)
def show_time(f):
start_time=time.time()
f()
end_time=time.time()
print(end_time-start_time)
show_time(foo) #实现了给任意函数增加计时的功能,但是同时也改变了函数的调用方式
#########
import time
def show_time(f): #简单的装饰器
def inner():
start=time.time()
f()
end=time.time()
print(end-start)
return inner

@show_time # 等价于:foo=show_time(foo)
def foo():
print('拆东墙,当年的明月换拨人看。')
time.sleep(1)
foo()
#拆东墙,当年的明月换拨人看。
#1.0000572204589844 装饰器
@show_time
def bar():
print('兴也苦亡也苦')
time.sleep(2)
bar()

######给功能函数加参数,的装饰器###
import time
def show_time(f):
def inner(*x,**y):
start=time.time()
f(*x,**y)
end=time.time()
print(end-start)
return inner

@show_time
def foo(*a,**b):
sum=0
for i in a:
sum+=i
print(sum)
time.sleep(1)

foo(1,2,3,3,3,6)
# 18
# 1.0000569820404053

##给装饰器加参数的装饰器#####
import time
def logger(j=0):
def show_time(f):
def inner(*a,**b):
start=time.time()
f(*a,**b)
end=time.time()
print(end-start)
if j==1:
print('打印日志')
return inner
return show_time
@logger(1)
def foo(*x,**y):
sum=0
for i in x:
sum+=i
print(sum)
time.sleep(1)
foo(3,1,2,3)
# 9
# 1.0000572204589844
# 打印日志

转载于:https://www.cnblogs.com/xuepangzi/p/7912607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值