+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(50)

2020-04(67)

2020-05(28)

2020-06(46)

2020-07(42)

文件操作习题_装饰器

发布于2020-02-27 10:32     阅读(565)     评论(0)     点赞(20)     收藏(0)


0

1

2

3

4

5

6

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

案例一

题目

创建装饰器,要求如下:
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

问题

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

Reference

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

发布了1 篇原创文章 · 获赞 0 · 访问量 5

0

1

2

3

4

5

6



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/234959/07b4c2187251cc5e99e1/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)