Python 之进阶函数 (装饰器) – Python量化投资

Python 之进阶函数 (装饰器)

  今天我们主要讲解一部分的装饰器,从最简单的装饰器,到带返回值的装饰器,到带参数的装饰器,最后到固定装饰器

在开始讲装饰器之前,我们要像讲两个知识点,一个是time模块和语法糖

1)time模块

  time.time()   :某段程序的执行时间

  time.sleep() :睡眠,(time)中可以添加参数,time表示时间

  针对time.time(),我们在使用的时候我们可以把它放在需要测速的代码的上下,这样就可以检测当前代码的运行时间

  由于有的时候,某段程序执行速度过快,所以我们可以time.sleep()来增加它的初始时间。防止检测值是 0.0

2)语法糖:@装饰函数名

 

装饰器:

 

1.最简单的装饰器

def timer(f):
#闭包,这里闭包的不是变量,而是形参f
def inner():
time.time()
f()
time.time()
return inner

def func():
print('hello ,装饰器')
time.sleep(0.1)

2.带返回值的装饰器

def timmer(f):      #装饰器函数,它的形参一定是被装饰函数
def inner():
start = time.time() #函数开始前书写区域
x = f() #接受func的返回值
end = time.time() #函数开始后书写区域
print(end - start)
return x #inner的返回值
return inner #timmer的返回值

@timmer # @装饰器函数名 ,它的下面一定是被装饰函数
def func():
print('你好,我要开始默写带返回值的装饰器了')
time.sleep(0.1)
return 'hello'

f1 = func()
print(f1)

timmer有返回值,返回值是inner(),所有我们调用timmer,就是调用函数inner(),然后查看inner是否有返回值,
然后最开始Inner()也是没有返回值,所以用一个变量来接受装饰器函数,并且返回该变量,这个时候inner的返回值就是
变量ret,所以当我们调用timmer函数的时候,返回值是ret的内容

 

3.带参数的装饰器

def timmer(f):      #装饰器函数,它的形参一定是被装饰函数
def inner():
start = time.time() #函数开始前书写区域
x = f() #接受func的返回值
end = time.time() #函数开始后书写区域
print(end - start)
return x #inner的返回值
return inner #timmer的返回值

@timmer # @装饰器函数名 ,它的下面一定是被装饰函数
def func(a):
print('你好,我要开始默写带返回值的装饰器了')
time.sleep(0.1,a)
return 'hello'

f1 = func(1)
print(f1)

4.固定装饰器

def wrapper(f):
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
print('count')
return ret
return inner
@wrapper
def conf(a,b):
print(a,'+',b)
return 'hello'
x = conf(12,23)


  通过对装饰器的学习,逐渐理解了装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数中添加内容


https://www.cnblogs.com/if-it-is-possible/p/11487313.html

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
Python
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论