文件操作习题_装饰器

在学完每一个内容之后,老师都会给我们留一些习题,这篇内容是装饰器的习题:

案例一

题目

创建装饰器,要求如下:
1.创建add_log装饰器,被装饰的函数打印日志信息;
2.日志格式为:[字符串时间]函数名:xxx,运行时间:xxx,运行返回值结果:xxx

代码

自己写的代码:

import sys
import time
t1=time.clock()
def add_log(func):
	def inner():
		print('函数名:',func.__name__)
		return func()#有返回值
	return inner
@add_log
def data_print():
	print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
	return '运行成功'
t2=time.clock
print(data_print())
print('运行时间:',t2-t1)

在网上找代码验证了一下:

import time
import functools

def add_log(fun):
	#保留被装饰函数的函数名和帮助信息文档
	@functiontools.wraps(fun)
	def inter(*arg,**kwargs):
		#time.time():秒数
		start_time=time.time()
		#由于被装饰函数有返回值
		res=fun(*args,**kwargs)
		end_time=time.time()
		#运行返回值结果:即为函数的返回值,fun.__name__:返回函数名
		print('[%s] 函数名:%s,运行时间:%.6f,运行返回值结果:%d',%		(time.ctime()),fun.__name__,end_time-start_time,res)
		#所以必须return返回函数返回值
		return res
	return inter
#添加装饰,自定义函数
@add_log
def add(x,y):
	time.sleep(1)#让时间不至于太短
	return x+y
print(add(1,10))

问题

1.理解错了意思,认为是要定义一个打印日志的函数,装饰器的目的是让打印出来的内容按照题中示意的格式。
2.不会用functools模块,还要深入理解一下。
3.运行结果的格式调整不太灵活。

Reference

https://blog.csdn.net/lilygg/article/details/86775226

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值