# 装饰器的形成的过程:最简单的装饰器;有返回值的;有一个参数的;万能参数
# 装饰器的作用
# 原则:开放封闭原则
# 语法糖
# 装饰器的固定模式:
# def wrapper(f): # 装饰器函数,f是被装饰的函数
# def inner(*args,**kwargs):
# '''在被装饰函数之前要做的事'''
# res = f(*args,**kwargs) # 被装饰的函数
# '''在被装饰函数之后要做的事'''
# return res
# return inner import time
# print(time.time()) # 获取当前时间
# time.sleep(5) # 让程序在执行到这个位置的时候停一会 # def func():
# '''
# 计算程序运行所用时间
# :return: 程序运行时间
# '''
# start = time.time()
# print('老板好,同事好,大家好')
# time.sleep(0.01)
# end = time.time()
# print(end - start)
# func() # def timer(f): # 专门写一个函数,计算函数执行时间
# start = time.time()
# f()
# end = time.time()
# print(end - start)
# def func():
# time.sleep(0.01)
# print('老板好,同事好,大家好')
# timer(func) # def timer(f): # 装饰器函数
# def inner():
# start = time.time()
# res = f() # 被装饰的函数
# end = time.time()
# print(end - start)
# return res
# return inner
# @timer # 等于func = timer(func) 语法糖, @装饰器函数名,紧跟被装饰的函数
# def func(): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好')
# return '新年好'
# # func = timer(func)
# res = func()
# print(res) # 装饰器的作用:不想修改函数的调用方式, 但是还想在原来的函数前后添加功能
# timer就是一个装饰器函数,只是对一个函数 有一些装饰作用 # 原则:开放封闭原则
# 开放:对扩展是开放的
# 封闭:读修改是封闭的 #
# def outer():
# def inner():
# return 'inner'
# inner()
# outer()
#---------------------------------------------------------------------------------------------------------------- # 装饰带参数函数的装饰器
# def timer(f): # 装饰器函数
# def inner(*args,**kwargs):
# start = time.time()
# res = f(*args,**kwargs) # 被装饰的函数
# end = time.time()
# print(end - start)
# return res
# return inner
# @timer # 等于func = timer(func) 语法糖, @装饰器函数名,紧跟被装饰的函数
# def func(a,b): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好',a,b)
# return '新年好'
#
# @timer
# def func1(a): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好',a)
# return '新年好'
# res = func(1,b = 2)
# ret = func1(1)
# print(res,ret) #--------------------------------------------------------------------------------------------------------
def wrapper(f): # 装饰器函数,f是被装饰的函数
def inner(*args,**kwargs):
'''在被装饰函数之前要做的事'''
res = f(*args,**kwargs) # 被装饰的函数
'''在被装饰函数之后要做的事'''
return res
return inner @wrapper
def func(a,b): # 被装饰的函数
time.sleep(0.01)
print('老板好,同事好,大家好',a,b)
return '新年好'
res = func(1,b = 2)
print(res)

python学习之老男孩python全栈第九期_day011知识点总结的更多相关文章

  1. python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法

    一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...

  2. python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合

    一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...

  3. python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块

    一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...

  4. python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法

    一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n ...

  5. python学习之老男孩python全栈第九期_day010知识点总结

    def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxi ...

  6. python学习之老男孩python全栈第九期_day007知识点总结

    基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...

  7. python学习之老男孩python全栈第九期_day001知识点总结

    1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...

  8. python学习之老男孩python全栈第九期_day014知识点总结

    # 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...

  9. python学习之老男孩python全栈第九期_day016知识点总结

    '''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...

随机推荐

  1. 序列化 pickle shelve json configparser

    模块pickle(皮考) dumps(当破死)序列化. 把对象转化成bytes loads(楼死) 反序列化. 吧bytes转化成对象 dic = {"jay": "周杰 ...

  2. 【ElasticSearch】:Mapping相关

    Mapping 类似数据库中的表结构定义,主要作用如下: 定义Index下的字段名(Field Name). 定义字段类型,例如数值型.字符串型.布尔型等. 定义倒排索引相关配置,比如是否索引.记录p ...

  3. Oracle SQL Developer连接报错以及链接oracle的sqlplus出现协议适配器错误

    之前用的好好的Oracle SQL Developer,不知道是不是匆忙关闭软件啥东西没保存或是删了什么东西,今天突然用不了的. 大清早的,打开Oracle SQL Developer,就给我一个惊喜 ...

  4. java批量读取多个文件并存入数据库

    有时候服务运行的日志文件,需要统计分析,但数据量很大,并且直接在文件中看很不直观,这时可以将文件中的内容导入到数据库,入库后的数据就可以按照需求进行统计分析了. 这个是以服务器的访问日志作为示例,一个 ...

  5. Apache Roller 5.0.3 XXE漏洞分析

    下载5.0.2的版本来分析 5.0.2的war包地址 http://archive.apache.org/dist/roller/roller-5/v5.0.2/bin/roller-weblogge ...

  6. 解决Fiddler抓不到HTPPS

    刚开始启动Fiddler,设置代理后,直接打开浏览器,输入我们最记得的网址“baidu.com”,发现Fiddler什么都抓不到,这是为什么呢?难道是我的配置有问题,重新检查一下,浏览器的代理已经设置 ...

  7. 架构模式数据源模式之:数据映射器(Data Mapper)

    一:数据映射器 关系型数据库用来存储数据和关系,对象则可以处理业务逻辑,所以,要把数据本身和业务逻辑糅杂到一个对象中,我们要么使用 活动记录,要么把两者分开,通过数据映射器把两者关联起来. 数据映射器 ...

  8. Odoo中使用的数据模型

    Odoo中使用的部分表如下, res_users 用户 res_groups 用户组(角色) res_lang 语言 res_partner 供应商/客户/联系人 res_font 字体 res_co ...

  9. 十分钟内在Ubuntu系统上搭建Mono开发环境(Mono软件Ubuntu系统国内镜像源、Mono国内镜像源)

    Mono软件Ubuntu系统国内镜像源.Mono国内镜像源 http://download.githall.cn/repo 替换为国内源(非官方)有利于加快mono的安装速度,一般情况下,完成mono ...

  10. Hadoop框架之HDFS的shell操作

    既然HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建.修改.删除.修改权限等,文件夹的创建.删除.重命名等.对HDFS的操作命令类似于Linux的she ...