python运维_fourth_chapter(1)

来源:互联网 发布:欧美品牌男装淘宝 编辑:程序博客网 时间:2024/04/30 12:36

装饰器

  1. 装饰器本质:用一个函数为其他函数添加附加功能(也称为语法糖)
  2. 使用装饰器的目的:在为其他函数添加附加功能时
    1. 不改变函数的源代码
    2. 不改变函数的调用方式
      因为代码的开发原则有一条为‘开放-封闭’原则,开放代码的延展性封闭代码的源码。
  3. 实现装饰器要懂的概念
    1. 函数即变量(python的内存回收机制)
    2. 高阶函数
    3. 套嵌函数

内存回收机制

点击这个博客链接有详细介绍!
在装饰器中的目的:不改变函数的调用方式

高阶函数

  1. 高阶函数的条件:参数为另一个函数的函数就是高阶函数
  2. 在装饰器中的作用:不改变源代码
  3. 例子
def show():    print('----------菜单----------')def choose(fun):    show_choose = input('是否要显示菜单')    if show_choose == '1':        fun()    elif show_choose == '0':        passchoose(show)

套嵌函数

  1. 套嵌函数的条件:在函数体内定义另一个函数
  2. 在装饰器中的目的:只有在调用时才执行函数,节省资源
  3. 例子
def show():    def show_add():        print('----------菜单----------')    return show_adda = show()#这里只把函数地址给了a变量a()#这里加了括号才开始执行函数地址中的函数

最简化的装饰器

  1. 装饰器语法:在函数前加@‘装饰器名’
  2. 例子
def input_show(fun):#放置函数地址参数    def inner():#在该函数下对传入的函数进行添加附加功能        password = input('输入菜单密码')#添加了一个要输入密码才能显示菜单的功能        if password == '12345':            fun()#调用想要装饰的函数        else:            print('密码错误')    return inner#返回前面设置好的函数的地址,这样就不会直接执行了#在没有添加装饰器之前,只要调用该函数就显示菜单@input_showdef show():    print('-------菜单--------')show()

函数带参数的装饰器

例子

def input_show(fun):#放置函数地址参数    def inner(choose_meus):#这里也要添加参数        password = input('输入菜单密码')#添加了一个要输入密码才能显示菜单的功能        if password == '12345':            fun(choose_meus)#调用想要装饰的函数        else:            print('密码错误')    return inner#返回前面设置好的函数的地址,这样就不会直接执行了#在没有添加装饰器之前,只要调用该函数就显示菜单@input_showdef show(choose_meus):    '''添加了一个参数    参数choose_meus:选择几号菜单'''    if choose_meus == '1':        print('-------菜单1--------')    elif choose_meus == '2':        print('-------菜单2--------')    elif choose_meus == '3':        print('-------菜单3--------')show('1')

带返回值的装饰器

例子

def input_show(fun):#放置函数地址参数    def inner(choose_meus):#这里也要添加参数            password = input('输入菜单密码')#添加了一个要输入密码才能显示菜单的功能            if password == '12345':                return  fun(choose_meus)#调用想要装饰的函数            else:                print('密码错误')                return '无法输出'    return inner#返回前面设置好的函数的地址,这样就不会直接执行了#在没有添加装饰器之前,只要调用该函数就显示菜单@input_showdef show(choose_meus):    '''添加了一个参数    参数choose_meus:选择几号菜单'''    if choose_meus == '1':        print('-------菜单1--------')        return '''1.吃2.喝3.玩4.乐'''    elif choose_meus == '2':        print('-------菜单2--------')    elif choose_meus == '3':        print('-------菜单3--------')content = show('1')print(content)

装饰器带参数的装饰器

def with_arg(arg):    def input_show(fun):#放置函数地址参数        def inner(choose_meus):#这里也要添加参数            if arg == 'need_auth':                password = input('输入菜单密码')#添加了一个要输入密码才能显示菜单的功能                if password == '12345':                    return  fun(choose_meus)#调用想要装饰的函数                else:                    print('密码错误')                    return '无法输出'            elif arg == 'dont_auth':                return fun(choose_meus)        return inner#返回前面设置好的函数的地址,这样就不会直接执行了    return input_show#在没有添加装饰器之前,只要调用该函数就显示菜单@with_arg('dont_auth')def show(choose_meus):    '''添加了一个参数    参数choose_meus:选择几号菜单'''    if choose_meus == '1':        print('-------菜单1--------')        return '''1.吃2.喝3.玩4.乐'''    elif choose_meus == '2':        print('-------菜单2--------')    elif choose_meus == '3':        print('-------菜单3--------')print(show('1'))

列表生成式

  1. 列表生成式:有规律地生成一系列的元素
  2. 目的:简化语法,增加代码的可读性。
  3. 例子:l = [i*2 for i in range(10) if i%2 == 0] 非常口语化,一看就能明白。

生成器

  1. 定义:不生成全部的元素,每次调用只生成一个元素,下次调用时再计算下一个元素。
  2. 目的:节约程序的内存空间。
  3. 例子:g = (i*2 for i in range(10) if i%2 == 0) 把括号中括号变为括号就是生成器的语法。
  4. 调用: 使用next()函数来调用生成器print(next(g))

迭代器

  1. 可迭代对象定义:可直接作用与for循环
  2. 迭代器定义:可以被next()函数调用并不断返回下一个值的对象
  3. 迭代器的判断:
from collections import Iteratorisinstance((x for x in range(10)), Iterator)

json与pickle数据序列化

  1. 目的:通过数列化可以吧内存中的数据保存到硬盘中,实现数据的永久保存。
  2. 区别:json适用于所有语言在内存数据中存在function数据时,不能保存function;而pickle相对与json来说会高级点支持的数据格式比较多。
  3. 详解json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
  4. json常用函数:dump\dumps都算是编码(把字符串编码为json格式);load\loads都算是解码(把json解码为程序可识别的字符串格式)

  5. pickle比较高级,以后有用到再了解。与json大同小异

软件目录规范

多去看别人写的软件,就能慢慢了解。自己心中要时刻保持规范化!

原创粉丝点击