python-装饰器之高阶函数、装饰器之嵌套函数

装饰器之高阶函数

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]

结语

感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190218A0BJL300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券