python笔记5:装饰器、内置函数、json

此页面是否是列表页或首页?未找到合适正文内容。

python笔记5:装饰器、内置函数、json

标签:ret格式代码简单简单的loadwith数字pre

装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

先看简单例子:

def run():
time.sleep(1)
print(‘run….‘)

现有一个新的需求,希望可以记录下函数的运行时间,需要在代码中计算时间的代码:

def run():
start_time = time.time()
time.sleep(1)
print(‘run….‘)
end_time = time.time()
print(‘run time‘, end_time – start_time)

login()等多个函数也有类型的需求,怎么做?若在每个函数内都写一个开始、结束时间,然后再算差值,这样代码就冗余了,可以定义一个函数,专门计算执行时间,再执行真的业务代码,如下:

def timer(func): #计算时间
start_time = time.time()
func()
end_time = time.time()
print(‘run time‘, end_time – start_time)

def run(): #业务代码
time.sleep(1)
print(‘run….‘)
timer(run)

以上代码逻辑不能理解,但这样的话,每次都将一个函数作为参数传递给timer()函数,而且这种方式已经破坏了原有的代码逻辑结构,之前执行业务逻辑时,执行运行run(),但现在不得不运行timer()。使用装饰器,可以解决以上问题。

简单装饰器

def timer(func): #计算时间
def deco(*args, **kwargs): #可以传参
start_time = time.time()
func(*args, **kwargs) #函数调用
end_time = time.time()
print(‘run time‘, end_time – start_time)
return deco #return 函数名,函数即变量

def run(): #业务代码
time.sleep(1)
print(‘run….‘)

run = timer(run) #run相当于deco
run() #run调用相当于deco()

函数即变量,在python里面的函数就是一个变量、函数名就是一个变量,这个函数名存放的是这个函数的内存地址,它把函数体放到内存里,在调用的时候从函数名里面的这个内存地址找到函数体然后运行这个函数。函数名后面加上小括号就是调用这个函数,如果只写这个函数名的话,打印一下就是这个函数的内存地址。

作者: 雨林木风

为您推荐

返回顶部