zoukankan      html  css  js  c++  java
  • python运维开发之第四天

    一、装饰器

    1、器:代表函数,装饰器本质是函数,(装饰器他函数)

    2、功能:为其他函数添加附加功能

    3、原则:

      (1)不能修改被装饰函数的源代码

      (2)不能修改被装饰函数的调用方式

    4、实现装饰器知识储备:

      (1)函数即“变量”,定义变量就是把函数体赋值给函数名(函数引用基数内存回收)

      (2)高阶函数

        a、把一个函数名当作实参传给另一个函数

        b、返回值中包含函数名

       其中a不修改源代码,b不修改调用方式

      (3)嵌套函数

        在函数体内去声明一个函数(def)

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Author  : Willpower-chen
    # @blog: http://www.cnblogs.com/willpower-chen/
    #
    # import time
    '''
    装饰器本质是函数,函数即‘变量’
    '''
    
    # #例子1
    # def foo():
    #     time.sleep(3)
    #     print('in the foo')
    #     bar()
    #
    # foo()
    
    
    # #例子2
    # def bar():
    #     print('in the bar')
    # def foo():
    #     time.sleep(3)
    #     print('in the foo')
    #     bar()
    # foo()
    #
    #
    # #例子3
    # def foo():
    #     time.sleep(3)
    #     print('in the foo')
    #     bar()
    # def bar():
    #     print('in the bar')
    # foo()
    #
    # #例子4
    # def foo():
    #     time.sleep(3)
    #     print('in the foo')
    #     bar()
    # foo()
    # def bar():
    #     print('in the bar')
    
    
    
    
    
    import time
    
    def timer(func):
        def recod(*args,**kwargs):
            start_time = time.time()
            func(*args,**kwargs)
            stop_time = time.time()
            run_time = stop_time - start_time
            print('调用%s 耗时 %s'%(func,run_time))
        return recod
    @timer
    def test1():
        time.sleep(3)
        print('in the test1')
    
    @timer
    def test2(name,age,sex):
        time.sleep(3)
        print('yourname is: ',name,age,sex)
    
    test1()
    test2('cjk','23','man')
    View Code

    二、生成器(generator)

    1、生成器只有在调用时,才会生成相应的数据

    2、生成器只记录当前位置

    3、只有一个__next__()方法

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Author  : Willpower-chen
    # @blog: http://www.cnblogs.com/willpower-chen/
    
    import time
    
    def consumer(name):
        while True:
            baozi = yield
            print("33[32m包子%s来了33[0m,被%s吃了!!! "% (baozi,name))
    
    
    def produce(name):
        c = consumer('')
        c2 = consumer('')
        c.__next__()
        c2.__next__()
        print('%s准备做包子'%name)
        for i in range(10):
            time.sleep(3)
            print('%s做了两个包子'%name)
            c.send("韭菜馅")
            c2.send("牛肉馅")
    
    produce('咪咪')
    吃包子

    三、迭代器

    1、可直接作用于for循环的对象统称为可迭代对象iterable

      isinstance()判断是否可迭代对象

    2、可以被next()函数调用并不断返回下一个值的对象称为迭代器interator

    3、list,dict,str编程iterator使用iter()函数

    四、内置方法

    1、匿名函数

    (lambda n:print(n))(5)等价于

    calc = lambada n:print(n)

    calc(5)

    2、filter()过滤

    res = filter(lambda n:n>5,range(10))

    for i in res:print(i)

    五、json&pickle

    1、json序列化与反序列化

    (1)序列化 json.dumps()

    (2)反序列化json.loads()

    json只能处理简单的序列化,主要是不同语言之间的转换

    2、pickle序列化与反序列化

    只能在python中进行转化,支持更复杂的序列化

  • 相关阅读:
    SD卡的控制方法(指令集和控制时序)
    MDK的优化应用(转)
    SD卡的SPI模式的初始化顺序(转)
    SD卡读写扇区注意事项(转)
    MDK下调试时提示AXF文件无法导入的解决方法(转)
    把一个 int 数字 n 格式化成16进制的字符串(前面补零成0位)
    DB9 公头母头引脚定义及连接、封装
    RS232 DB9 公头 母头 串口引脚定义
    Codeforces 91C Ski Base 加边求欧拉回路数量
    Cocos Code IDE + Lua初次使用FastTiledMap的坑
  • 原文地址:https://www.cnblogs.com/willpower-chen/p/5786533.html
Copyright © 2011-2022 走看看