装饰器之高阶函数
1、把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
案例:
该案例就是将bar当做实参传递给test1这个函数,而且是在不修改bar源代码的情况下为bar函数添加计时的功能
import time
def bar():
time.sleep(3)
print('in the bar')
def test1(func):
start_time=time.time()
func() #run bar
stop_time=time.time()
print("the func run time is %s" %(stop_time-start_time))
test1(bar)
运行结果:
in the bar
the func run time is 3.010805130004883
[Finished in 3.2s]
2、返回值中包含函数名(不修改函数的调用方式)
案例:
该案例是在test2函数的返回值中包含了func函数名,而且在调用时没有修改bar的调用方式
import time
def bar():
time.sleep(3)
print('in the bar')
def test2(func):
print(func)
return func
bar=test2(bar)
bar() #run bar
运行结果:
in the bar
[Finished in 3.s]
装饰器之嵌套函数
嵌套函数
在一个函数的函数体内,用def声明一个新函数,而不是去调用,这就是嵌套函数
案例:
在下面的情况下,嵌套函数bar因为在foo中属于“局部变量”性质的函数,所以bar不能在函数外部调用
def foo():
print('in the foo')
def bar():
print('in the bar')
bar()
foo()
在下面这种情况下,bar在函数体内部调用,所以最终的输出结果也可以看到bar的结果
def foo():
print('in the foo')
def bar():
print('in the bar')
bar()
foo()
x运行结果:
in the foo
in the bar
[Finished in 0.2s]
结语
感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。
领取专属 10元无门槛券
私享最新 技术干货