# 装饰器的形成的过程:最简单的装饰器;有返回值的;有一个参数的;万能参数
# 装饰器的作用
# 原则:开放封闭原则
# 语法糖
# 装饰器的固定模式:
# 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. mysql多列索引

    1,数据库每次查询只能使用一个索引 2,假设数据 表T (a,b,c) rowid 为物理位置rowid a b c(1) 1 1 1(2) 2 1 13(3) 2 2 14(4) 1 3 3(5)  ...

  2. day 39 jq 学习入门2

    ---恢复内容开始--- 前情提要: jq 是用来降低js 的工作的一个组件 一:利用jq 实现动画效果 <!DOCTYPE html> <html lang="en&qu ...

  3. cmd生成文件目录tree

    一.生成 目录tree 到 控制台 有时候需要快速生成一个文件夹中所有成员的 目录tree,可以通过 cmd命令直接生成 命令:tree /f 二.生成 目录tree 到 指定文件 如果想讲目录树生成 ...

  4. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标

    1. Understand the major trends driving the rise of deep learning.2. Be able to explain how deep lear ...

  5. 集合框架_DAY17

    1:五种数据结构: 数组:长度固定,有序,查找方便   链表:添加删除方便   栈:先进后出    队列:先进先出   树结构:完成排序动作 2:泛型(了解) (1)是一种把明确数据类型的工作推迟到创 ...

  6. MapReduce中的倒排索引

    0.倒排索引资料: http://blog.csdn.net/pzasdq/article/details/51442856 1.三个日志源文件: a.txt hello tom hello jerr ...

  7. ES6基础教程一 学习笔记

    一.变量的声明 1.var 声明全局变量 在ES6中var用来声明全局变量. 2.let 声明局部变量 3.const 声明常量 二.变量的解构赋值 //1.数组赋值 let [a,b,c]=[1,2 ...

  8. Java 范例 - 线程

    创建线程 Java 中有以下三种方式创建线程,其中前两种无法获取返回值,而最后一种可以获取返回值. 实现 Runnable 接口 继承 Thread 类 通过 Callable.Future 接口配合 ...

  9. Vue笔记:使用 Yarn 管理依赖包

    上年10月份, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm ,它比npm更快.更高效. Yarn VS npm 1.yarn.lock 文件 在 npm 中同样 ...

  10. Java创建线程的两种方式

    方式 继承Thread类 实现Runnable方法 实例 #继承Thread类 public class ThreadTest2 extends Thread { private int thread ...