• 【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")
    

      

          

     

      

  • 相关阅读:
    内置函数
    map,reduce和filter函数
    函数式编程和尾调用
    函数作用域,匿名函数
    全局变量和局部变量
    函数和过程
    百分号字符串拼接
    集合关系运算交,差,并集
    C#基础-压缩文件及故障排除
    【QQ】前端实现QQ会话功能
  • 原文地址:https://www.cnblogs.com/wanghui1991/p/5777352.html
Copyright © 2020-2023  润新知