zoukankan      html  css  js  c++  java
  • 【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")
    

      

          

     

      

  • 相关阅读:
    Uboot命令使用
    git删除某次提交
    chrome随意改变主题
    C++11——处理日期和时间的chrono库
    C++11——多线程异步操作
    C++11——原子变量
    C++11——C++线程同步之条件变量
    C++11——C++线程同步之互斥锁
    C++11——call_once
    C++11——命名空间
  • 原文地址:https://www.cnblogs.com/wanghui1991/p/5777352.html
Copyright © 2011-2022 走看看