【python自动化第四篇:python入门进阶】
今天的课程总结:
- 装饰器
- 迭代器&生成器
- json&pickle实现数据的序列化
- 软件目录结构规范
一、装饰器
装饰器的本质是函数,起目的就是用来为其它函数增加附加功能
原则:不能修改被装饰函数的源代码;被装饰函数的调用方式不能改变 ,简而言之就是转时其对于函数就是透明的,对被装饰的函数是没有影响的。
实现装饰器的知识储备:函数即变量;高阶函数;嵌套函数;最终高阶函数加上嵌套函数就构成了装饰器,函数也就是一种变量
知识点介绍:
函数即变量
高阶函数:
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")
【python自动化第四篇:python入门进阶】的更多相关文章
- 【python自动化第七篇:面向对象进阶】
知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何 ...
- 【python自动化第十一篇】
[python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
- 第四篇.python的基础
目录 第四篇.python基础01 1. 变量 2. 常量 3. python变量内存管理 4. 变量的三个特征 5. 花式赋值 6. 注释 7. 数据类型基础 8. 数字类型 9. 字符串类型 10 ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式
孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- Python自动化 【第一篇】:Python简介和入门
Python简介: 一.什么是python Python是一门动态解释性的强类型定义语言. pythonde 特点:“优雅”.“明确”.“简单”. 二.Python由来 python的创始人为吉多·范 ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
随机推荐
- spring mvc 和mybatis整合 的异常处理
1.自定义异常信息类 通过构造函数来实现异常信息的接收 public class CustomException extends Exception { //异常信息 private String m ...
- 上传文件到服务器端后进一步推送到sftp服务器
扩展安装 要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展 openssl openssl-dev libssh php ssh 扩展 按照下面的命 ...
- 给destoon商城的列表中和首页添加购物车功能
如何给destoon商城的列表中和首页添加购物车功能? 目前加入购物车的功能只存在商城的详细页面里,有时候我们需要批量购买的时候,希望在列表页就能够使用这个加入购物车的功能. 修改步骤见下: 例如在商 ...
- Windows下MySQL数据库备份脚本(二)
说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...
- C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是 ...
- nRF52系列——nRF52832来袭
nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...
- a href="#"与a href="####"的区别是什么
前提是 :有滚动条. [感谢 黎明就在眼前 博客园园友] '#' 是有特殊意义,如果 '#' 后有内容会被认为是一个标签而从页面找到相应标签跳转到该处,找不到时会跳到页首,通常情况下使用“#ID”来 ...
- 第 11 章 桥梁模式【Bridge Pattern】
以下内容出自:<<24种设计模式介绍与6大设计原则>> 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都很赚钱,天 ...
- C语言可变参数在宏定义中的应用
在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用 ...
- Java多线程初学者指南(6):慎重使用volatile关键字
volatile关键字相信了解Java多线程的读者都很清楚它的作用,和sychnorized 一样用于多线程的同步.volatile关键字用于声明简单类型变量,如int.float.boolean等数 ...