首页 > 代码库 > 模块入门:闭包,时间模块,装饰器
模块入门:闭包,时间模块,装饰器
1.闭包: 闭包(closure)是计算机编程领域的专业名词,指可以包含自由(未绑定到特定对象)变量的代码块,子函数可以使用父函数中的局部变量。
1 g = 70 2 def outer(x): 3 x = 10 4 def inner(): #条件一inner就是内部函数, 5 c = 10 6 print(c) 7 print(g) #条件2外部环境的一个变量#局部变量全局无法调用 8 return inner# 内部函数inner就是一个闭包 9 outer()10 #关于闭包:闭包 = 内部函数+定义函数时的变量
2.时间模块(time)
前面在一些程序中我们实现了日志记录这一功能,我们也可以记录某一功能实现需要的时间,因此这引出时间模块这一说
首先举个简单的例子来说:
一个简单的计时器
1 import time #时间模块2 start = time.time()3 time.sleep(2)4 end = time.time()5 print(end - start)
结果:
2.0003368854522705
2.1
1 import time 2 def foo(): 3 print("foo.....") 4 time.sleep(2) 5 def bar(): 6 print("bar......") 7 time.sleep(1) 8 def show_time(f): 9 start = time.time()10 f()11 end = time.time()12 print("spend %s" %(end - start))13 show_time(bar)14 show_time(foo)
结果为:
bar......spend 1.0016872882843018foo.....spend 2.0003185272216797
这就是简单的时间模块在函数中区调用它,计算出所需要的时间
2.2
1 import time2 print(help(time))3 print(time.time())# 1473330166.665491:时间戳 ******4 time.sleep(1) #******5 print(time.clock())# 计算CPU执行时间
1 import time2 print(time.gmtime())#结构化时间#time.struct_time(tm_year=2016, tm_mon=9, tm_mday=20, tm_hour=10, tm_min=43, tm_sec=46, tm_wday=1, tm_yday=264, tm_isdst=0)3 print(time.localtime())#time.struct_time(tm_year=2016, tm_mon=9, tm_mday=20, tm_hour=18, tm_min=43, tm_sec=46, tm_wday=1, tm_yday=264, tm_isdst=0)
1 print(help(time.strftime))2 struct_time=time.localtime()3 print(time.strftime(‘%Y--%m--%d %H:%M:%S‘,struct_time)) #字符串时间:*******
#strftime,是一种计算机函数,strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串
结果是:2016--09--20 18:46:57
1 a=time.strptime(‘2016-09--08 18:48:35‘,‘%Y-%m--%d %H:%M:%S‘)2 print(a.tm_year)3 print(a.tm_mday)4 print(a.tm_wday)
结果是:
2016
8
3
2.3 ctimectime功能是把日期和时间转换为字符串,
1 print(time.ctime())2 print(time.ctime(3600))
结果是:
Tue Sep 20 18:57:37 2016
Thu Jan 1 09:00:00 1970 #从这个时间开始算起
1 print(help(time.mktime))2 print(time.mktime(time.localtime()))
结果是:
1474369250.0
1 import datetime2 3 print(datetime.datetime.now())
结果:2016-09-20 19:03:33.852781
3.装饰器
3.1首先还是上面的计时器的一个小例子
1 import time 2 def show_time(f): 3 def inner(): 4 start = time.time() 5 f() 6 end = time.time() 7 print("spend %s" % (end - start)) 8 return inner 9 @show_time #foo = show_time(foo)此时注意一下这个地方感觉foo好像被show_time装饰了,其实可以简单的说这就是装饰器,
其实这里的@show_time和后面的foo = show_time(foo)是等价的,只不过@看起来更有装饰器的感觉,
10 def foo():11 print("foo.....")12 time.sleep(2)13 foo()14 @show_time15 def bar():16 print("bar......")17 time.sleep(1)18 bar()
3.2
1 import time 2 def logger(flag=""): 3 def show_time(f): 4 def inner(*x,**y): 5 start = time.time() 6 f(*x,**y) 7 end = time.time() 8 print("spend %s" %(end - start)) 9 if flag == "true":10 print("日志记录")11 return inner12 return show_time13 @logger("true") #@show_time14 def add(*a,**b):15 sums = 016 for i in a:17 sums += i18 print(sums)19 time.sleep(2)20 add(1,2,3,4,5,6,7,8)21 @logger("true")22 def bar():23 print("bar")24 time.sleep(1)25 bar()
结果是:
36spend 2.0003716945648193日志记录barspend 1.0006699562072754日志记录
模块入门:闭包,时间模块,装饰器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。