python运维_fourth_chapter(1)
来源:互联网 发布:欧美品牌男装淘宝 编辑:程序博客网 时间:2024/04/30 12:36
装饰器
- 装饰器本质:用一个函数为其他函数添加附加功能(也称为语法糖)
- 使用装饰器的目的:在为其他函数添加附加功能时
- 不改变函数的源代码
- 不改变函数的调用方式
因为代码的开发原则有一条为‘开放-封闭’原则,开放代码的延展性封闭代码的源码。
- 实现装饰器要懂的概念
- 函数即变量(python的内存回收机制)
- 高阶函数
- 套嵌函数
内存回收机制
点击这个博客链接有详细介绍!
在装饰器中的目的:不改变函数的调用方式
高阶函数
- 高阶函数的条件:参数为另一个函数的函数就是高阶函数
- 在装饰器中的作用:不改变源代码
- 例子
def show(): print('----------菜单----------')def choose(fun): show_choose = input('是否要显示菜单') if show_choose == '1': fun() elif show_choose == '0': passchoose(show)
套嵌函数
- 套嵌函数的条件:在函数体内定义另一个函数
- 在装饰器中的目的:只有在调用时才执行函数,节省资源
- 例子
def show(): def show_add(): print('----------菜单----------') return show_adda = show()#这里只把函数地址给了a变量a()#这里加了括号才开始执行函数地址中的函数
最简化的装饰器
- 装饰器语法:在函数前加
@‘装饰器名’
- 例子
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'))
列表生成式
- 列表生成式:有规律地生成一系列的元素
- 目的:简化语法,增加代码的可读性。
- 例子:
l = [i*2 for i in range(10) if i%2 == 0]
非常口语化,一看就能明白。
生成器
- 定义:不生成全部的元素,每次调用只生成一个元素,下次调用时再计算下一个元素。
- 目的:节约程序的内存空间。
- 例子:
g = (i*2 for i in range(10) if i%2 == 0)
把括号中括号变为括号就是生成器的语法。 - 调用: 使用next()函数来调用生成器
print(next(g))
迭代器
- 可迭代对象定义:可直接作用与for循环
- 迭代器定义:可以被next()函数调用并不断返回下一个值的对象
- 迭代器的判断:
from collections import Iteratorisinstance((x for x in range(10)), Iterator)
json与pickle数据序列化
- 目的:通过数列化可以吧内存中的数据保存到硬盘中,实现数据的永久保存。
- 区别:json适用于所有语言在内存数据中存在function数据时,不能保存function;而pickle相对与json来说会高级点支持的数据格式比较多。
- 详解json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
json常用函数:dump\dumps都算是编码(把字符串编码为json格式);load\loads都算是解码(把json解码为程序可识别的字符串格式)
pickle比较高级,以后有用到再了解。与json大同小异
软件目录规范
多去看别人写的软件,就能慢慢了解。自己心中要时刻保持规范化!
阅读全文
0 0
- python运维_fourth_chapter(1)
- python(1) python基础
- python运维second_chapter(1)
- 开始Python -- Python基础(1)
- #Python#Python学习(1)—20130107
- Python学习(1)--《Python编程实践》
- Python 第一章 基础知识(1) 安装Python
- Python学习1(安装python&helloword)
- python学习笔记1 (python+django)
- python学习(1)--python处理文本
- Python学习笔记(1):python循环
- The Python Tutorial(1)- Python教程
- python运维__fifth_chapter(1)--import详解
- python入门(1)
- Python初级(1)
- Python笔记(1)
- python代码(1)
- python学习(1)
- Unity 制作font字体
- 《MySQL入门很简单》学习笔记(17)之第17章MySQL日志(关键词:MySQL/日志)
- 圆、矩形、线段碰撞检测
- 文章标题
- php 将debug信息写入文件的函数($_SERVER['PHP_SELF'])
- python运维_fourth_chapter(1)
- 析构函数为什么会自动再调用父类的析构函数?
- 服务器搬迁清单需要启动任务以及恢复办法
- jq serialize() 方法
- AndroidUtilCode
- 【3dsmax】动画的基本制作
- NOIP2017提高组 模拟赛13(总结)
- bzoj1072[SCOI2007]排列perm
- Angularjs系列之常用内置指令