首页 > 代码库 > 模块入门:闭包,时间模块,装饰器

模块入门:闭包,时间模块,装饰器

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日志记录

 

 

模块入门:闭包,时间模块,装饰器