【python自动化第四篇:python入门进阶】

今天的课程总结:

  1. 装饰器
  2. 迭代器&生成器
  3. json&pickle实现数据的序列化
  4. 软件目录结构规范

一、装饰器

  装饰器的本质是函数,起目的就是用来为其它函数增加附加功能

  原则:不能修改被装饰函数的源代码;被装饰函数的调用方式不能改变  ,简而言之就是转时其对于函数就是透明的,对被装饰的函数是没有影响的。

  实现装饰器的知识储备:函数即变量;高阶函数;嵌套函数;最终高阶函数加上嵌套函数就构成了装饰器,函数也就是一种变量

  知识点介绍:

    函数即变量

    高阶函数:

        a.把一个函数名仿作实参传给另外一个函数(不修改装饰函数源代码的情况下为其添加功能)

import time
def test1(func):
    start_time = time.time()
    func()
    stop_time = time.time()
    print("toyal %s"%(stop_time-start_time))
def bar():
    time.sleep(3)
    print("in the  bar!!")

test1(bar)                                             #其中,test1相当于是一个装饰器,但不完全是。test1(bar)

        b.返回值中包含函数名(不用修改函数的调用方式)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
def test1(func):
    print(func)
    return func
def bar():
    time.sleep(3)
    print("in the  bar!!")

bar = test1(bar)
bar()

      嵌套函数:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#函数的嵌套
def foo():
    print("hello World")
    def bar():
        print('in the bar!!')
     bar()
foo()

    然后就是装饰器了:说白了装饰器就是高阶函数和嵌套函数的结合

    装饰器的一个栗子:

import time
##装饰器部分
def timer(func):
    def deco():
        start_time = time.time()
        #return func()
        func()
        stop_time = time.time()
        print("total is %s:"%(stop_time-start_time))
    return deco
@timer    #调用装饰器
##test1和test2函数相当于是源代码,然而一直没改变原代码而是显得功能添加,这就是装饰器达成的效果
def test1():
    time.sleep(1)
    print('test1')
@timer    #装饰器外城函数名
def test2():
    time.sleep(2)
    print("test2")
test1()
test2()

  

  要是传入了参数,就利用参数组修改:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
def timer(func):
    def deco(*args):                                  #如果带了参数组,下面源代码中的参数传递就可以被调用了
        start_time = time.time()
        func(*args)
        stop_time = time.time()
        print("total is %s"%(stop_time-start_time))
    return deco
@timer
def test1():
    time.sleep(0.1)
    print("heheheheh")
@timer
def test2(name):
    time.sleep(1)
    print("test2",name)
test1()
test2("wanghui")

  

 

 

      

 

  

posted @ 2016-08-16 18:05  valiente  阅读(1956)  评论(0编辑  收藏  举报