zoukankan      html  css  js  c++  java
  • 模块入门:闭包,时间模块,装饰器

    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.0016872882843018
    foo.....
    spend 2.0003185272216797

    这就是简单的时间模块在函数中区调用它,计算出所需要的时间

    2.2

    1 import time
    2 print(help(time))
    3 print(time.time())# 1473330166.665491:时间戳  ******
    4 time.sleep(1)                                #******
    5 print(time.clock())# 计算CPU执行时间
    1 import time
    2 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 datetime
    2 
    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_time
    15 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 inner
    12     return show_time
    13 @logger("true")              #@show_time
    14 def add(*a,**b):
    15     sums = 0
    16     for i in a:
    17         sums += i
    18     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()
    结果是:
    36
    spend 2.0003716945648193
    日志记录
    bar
    spend 1.0006699562072754
    日志记录
  • 相关阅读:
    linux 6 安装 Nagios服务
    linux 6 安装 Nginx服务
    Rsync的配置与使用
    linux 6 搭建 msyql 服务
    linux6搭建Apache服务
    Linux 7搭建NFS服务
    Linux 6 忘记root密码重置
    简单makefile
    多线程c++11编程题目
    redis 代码结构与阅读顺序
  • 原文地址:https://www.cnblogs.com/mars527/p/5850407.html
Copyright © 2011-2022 走看看