51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2196|回复: 1
打印 上一主题 下一主题

[资料] Python:装饰器 ,闭包

[复制链接]
  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-4-2 14:32:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1:装饰器 :不改变被装饰的函数情况下附加一些功能
    本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能
    实质: 是一个函数
        参数:是你要装饰的函数名(并非函数调用)
        返回:是装饰完的函数名(也非函数调用)
        作用:为已经存在的对象添加额外的功能
        特点:不需要对对象做任何的代码上的变动

    例1:计算运行时长
    1. import time
    2. def hx(f):  #装饰器的函数,f接受被装饰的函数名
    3.     def neibu(): #装饰内部函数
    4.         start=time.time()
    5.         f() #调用被装饰的函数
    6.         end=time.time()
    7.         print(end-start)
    8.     return neibu #装饰器返回内部函数。(内部代表的是包装盒)
    9. @hx #@加函数名,代表下面的函数被hx装饰
    10. def jisuan():
    11.     print('12143')
    12. jisuan()
    复制代码


    例2:
    1. import time
    2. def dd(func):
    3.     def nb(cs):
    4.         print('**')
    5.         func(cs)
    6.         print('**')
    7.     return  nb
    8. def cc(func):
    9.     def nb(cs):
    10.         print('#########')
    11.         func(cs)
    12.         print('#########')
    13.     return  nb
    14. @cc
    15. @dd
    16. def ych(name):
    17.     print(name,'开演唱会')
    18. ych('周杰伦')
    复制代码

    输出:
    #########
    **
    周杰伦 开演唱会
    **
    #########

    2,闭包
    闭包三条件。装饰器里有闭包
    1包含内部函数的函数
    2内部函数使用了外部函数的变量
    3返回内部函数名
    1. def hanshu(b): #1,包含内部函数的函数
    2.     a=3
    3.     def nb(c): #闭包
    4.         d=a*b+c # 3,内部函数使用了外部函数的变量
    5.         return d
    6.     return nb #2,返回内部函数名
    7. x=hanshu(4)
    8. print(x(5))
    9. print(x(6))
    10. print(hanshu(4)(5))   #输出17  4为外部函数变量 ,5 为内部函数变量
    复制代码

    输出:
    17
    18
    17
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 10:44 , Processed in 0.062620 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表