# 装饰器
# 特征: 是用一个@开头的字符串
# 装饰器通常用来装饰函数、或者类的方法
# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
# 一般来说装饰器本身也是一个函数
#
# def test(name):
#           def test_in():
#                  print(name)
#           return test_in
#
# func = test('peiyanan')
# func()

'''
逻辑思想:①首先把peiyanan实参传递给test函数
              ②在执行test函数时,又返回到test_in函数
              ③执行test_in函数并打印输出
'''

# =================================================================================
# 不带参数的装饰器(装饰器、被装饰函数都不带参数)
# import time
# def showTime(func):
#              def wrapper():
#                      start = time.time()
#                      func()
#                      end = time.time()
#                      print('spend is {}'.format(end-start))
#
#              return wrapper
#
#
#
# @showTime       # foo = showTime(foo)
# def foo():
#         print('foo..')
#         time.sleep(3)
#
#
# foo()

'''
逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
              ②在执行showTime函数的同时,会先打印出foo函数中的
              ③然后又将返回给wrapper函数
              ④最后逕wrapper函数并打印输出
'''

# ==================================================================================
# 带参数的被装饰的函数
import time
def showTime(func):
      def wrapper(x, y):
            start = time.time()
            func(x, y)
            end = time.time()
            print('spend is {}'.format(end-start))

return wrapper

@showTime       # foo = showTime(foo)
def foo(x, y):
        print(x+y)
        time.sleep(3)

foo(4, 5)

'''
逻辑思想:①foo函数调用,执行foo函数体并打印输出
              ②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
              ③执行showTime函数体,遇到return,又返回给了wrapper函数体
              ④执行wrapper函数体时,一次执行并最后输出
'''

# 使用装饰器的缺点
# 不要在装饰器之外添加逻辑功能
# 不能装饰@staticmethod或者@classmethod已经装饰过的方法
# 装饰器会对原函数的原信息进行更改
# 装饰器
# 特征: 是用一个@开头的字符串
# 装饰器通常用来装饰函数、或者类的方法
# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能
# 一般来说装饰器本身也是一个函数
#
# def test(name):
#        def test_in():
#             print(name)
#        return test_in
#
# func = test('peiyanan')
# func()

'''
逻辑思想:①首先把peiyanan实参传递给test函数
              ②在执行test函数时,又返回到test_in函数
              ③执行test_in函数并打印输出
'''

# =================================================================================
# 不带参数的装饰器(装饰器、被装饰函数都不带参数)
# import time
# def showTime(func):
#          def wrapper():
#                 start = time.time()
#                 func()
#                 end = time.time()
#                 print('spend is {}'.format(end-start))
#
#          return wrapper
#
#
#
# @showTime          # foo = showTime(foo)
# def foo():
#        print('foo..')
#        time.sleep(3)
#
#
# foo()

'''
逻辑思想:①首先将foo函数当做参数的形式传递到showTime函数中去
              ②在执行showTime函数的同时,会先打印出foo函数中的
              ③然后又将返回给wrapper函数
              ④最后逕wrapper函数并打印输出
'''

# ==================================================================================
# 带参数的被装饰的函数
import time
def showTime(func):
           def wrapper(x, y):
                  start = time.time()
                  func(x, y)
                  end = time.time()
                  print('spend is {}'.format(end-start))

return wrapper

@showTime        # foo = showTime(foo)
def foo(x, y):
         print(x+y)
         time.sleep(3)

foo(4, 5)

'''
逻辑思想:①foo函数调用,执行foo函数体并打印输出
              ②接着showTime函数调用foo(这里foo既可以看做一个参数,也可以看做是一个函数),传递给showTime函数体
              ③执行showTime函数体,遇到return,又返回给了wrapper函数体
              ④执行wrapper函数体时,一次执行并最后输出
'''

# 使用装饰器的缺点
# 不要在装饰器之外添加逻辑功能
# 不能装饰@staticmethod或者@classmethod已经装饰过的方法
# 装饰器会对原函数的原信息进行更改

笔记||Python3进阶之装饰器的更多相关文章

  1. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  2. Python进阶(六)----装饰器

    Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: ​ 增加一些额外的新功能 封闭原则: ​ 不改变源码.以及调用方式 二丶初识装饰器 装饰器: ​ 也可称装饰器函数,诠释开放封闭原则 ...

  3. TS 自学笔记(二)装饰器

    TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# ...

  4. Python之路第一课Day4--随堂笔记(迭代生成装饰器)

    上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...

  5. python学习笔记-(八)装饰器、生成器&迭代器

    本节课程内容概览: 1.装饰器 2.列表生成式&迭代器&生成器 3.json&pickle数据序列化 1. 装饰器 1.1 定义: 本质上是个函数,功能是装饰其他函数—就是为其 ...

  6. python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

    1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = Fal ...

  7. python3 如何给装饰器传递参数

    [引子] 之前写过一篇文章用来讲解装饰器(https://www.cnblogs.com/JiangLe/p/9309330.html) .那篇文章的定位是入门级的 所以也就没有讲过多的高级主题,决定 ...

  8. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  9. JavaScript学习笔记(四十四) 装饰器

    装饰器模式(Decorator) 在装饰器模式中,可以在运行时给一个对象动态的添加额外的功能.当和静态类打交道的时候(static classes),这可能是一个挑战.但在JavaScript中,对象 ...

随机推荐

  1. 如何利用wx.request进行post请求

    1,method 是  get  方式的时候,会将数据转换成 query string method 为 post 时,header为{"Content-Type": " ...

  2. Robot Framework高级

    一.Web自动化测试 二.C/S自动化测试 三.数据库自动化测试 四.接口自动化测试 五.RF内置测试库 六.持续集成内置测试库 七.移动自动化测试 八.自定义RF

  3. Color the ball(差分数组)

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...

  4. 安卓之滚动视图ScrollView

    (1)垂直方向滚动时,layout_width要设置为match_parent,layout_height要设置为wrap_content (2)水平方向滚动时,layout_width要设置为wra ...

  5. dom4j+反射实现bean与xml的相互转换

    由于目前在工作中一直用的dom4j+反射实现bean与xml的相互转换,记录一下,如果有不正确的地方欢迎大家指正~~~ 一.反射机制 在此工具类中使用到了反射技术,所以提前也看了一些知识点,例如:ht ...

  6. python requests.request 和session.request区别究竟在哪里

    import requests hd={"X-auth":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzeXN0ZW0iLCJBUEkiOiIvdW ...

  7. 201771010135杨蓉庆《面向对象程序设计(java)》第四周学习总结

    学习目标 1.掌握类与对象的基础概念,理解类与对象的关系: 2.掌握对象与对象变量的关系: 3.掌握预定义类的基本使用方法,熟悉Math类.String类.math类.Scanner类.LocalDa ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:堆叠的水平

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. pip源、搭建虚拟环境、git

    一.pip源 1.1 介绍 1.采用国内源,加速下载模块的速度2.常用pip源:-- 豆瓣:https://pypi.douban.com/simple-- 阿里:https://mirrors.al ...

  10. 【PAT甲级】1042 Shuffling Machine (20 分)

    题意: 输入洗牌次数K(<=20),输入54张牌每次洗入的位置(不是交换的位置),输出洗好的牌. AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC ...