首页 > 编程语言 >python基础——闭包 装饰器

python基础——闭包 装饰器

时间:2022-08-25 19:13:43浏览次数:77  
标签:闭包 函数 python inner func time 装饰 def

闭包

  1. 函数嵌套, 即外部函数嵌套一个内部函数;
  2. 外部函数返回内部函数引用;
  3. 内部函数使用外部函数的变量或者形参
# 简单演示
# def f1(x):
#
#     def f2():
#         print(x)
#
#     return f2


装饰器

装饰器:不修改被装饰对象的源代码,也不修改调用方式的前提下,给被装饰对象添加新的功能

  • 装饰器
  • 器:器具,工具
  • 装饰:为其他事物添加额外的功能
  • 定义一个函数,这个函数的功能就是用来装饰其他函数的
  • 也就是说这个函数是用来给其他函数添加额外的功能的
def inner(name):
    print(name)
    print('原来函数')

# 增加统计程序运行时间的功能
def outer(func):
    # func = inside
    def wrapper(*args, **kwargs):
        import time
        start = time.time()
        func(*args, **kwargs)
        time.sleep(1)
        end = time.time()
        print('所用时间:',end-start)
    return wrapper

# 调用:先用装饰器装饰一下,然后调用
inner = outer(inner)
inner('aaaa')
# 增加统计程序运行时间的功能
def outer(func):
    # func = inside
    def wrapper(*args, **kwargs):
        import time
        start = time.time()
        func(*args, **kwargs)
        time.sleep(1)
        end = time.time()
        print('所用时间:',end-start)
    return wrapper

# 语法糖 必须装饰器写好了才可以,直接装饰需要装饰的函数
@outer  # 相当于 inner = outer(inner)
def inner(name):
    print(name)
    print('原来函数')
# 调用:使用语法糖就可以直接调用
inner('aaaa')

# 可能上边写的有返回值,但是经过装饰,返回值找不到了
# 还是有变化、
# 所以完美的模板应该如下
def outer(func):
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        return res
    return wrapper
# 想要添加功能,在模板里添加

标签:闭包,函数,python,inner,func,time,装饰,def
From: https://www.cnblogs.com/fhy-blog/p/16625414.html

相关文章

  • pythoncom 无法import win32api、win32con、win32com、win32gui 问题一次解决!方法合集
    最近写项目发现pythoncom导入win32api、win32con、win32com、win32gui等win32相关的包都会出现或多或少问题,Google一大堆不靠谱的方法试了个遍。特此记录一下解决办法......
  • python selenium使用无头模式执行用例
    什么是无头模式?HeadlessBrowser模式是浏览器的无界面状态,即在不打开浏览器界面的情况下使用浏览器。该模式的好处如下:1)可以加快web自动化测试的执行时间,对于web自动化......
  • mitudesk的python日记1
    1.python是一种解释性语言,是一行一行阅读的,在使用编译模式而非控制台模式时,会生成中间文件pyc2.Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变......
  • 将python打包成exe
    1.PyInstallerpass2.AutoPYtoEXE2.1简单说明简介:使用简单的图形界面将.py转换为.exe。时间:jul9,2018~Aug9,2022python版本:3.6 ~3.102.2安装(1)通过Pypi安......
  • python基础-GIL
    python速度慢的原因动态类型语言,边解释边执行GIL,无法利用多核CPU并发执行GIL同步线程的一种机制,使得任何时刻仅有一个线程在执行。在多核心处理器上,使用GIL的解释器......
  • python基础-垃圾回收机制
    1.主)引用计数(referencecounting)引用计数为0时,该对象生命就结束了。维护引用计数消耗资源,循环引用L.append(L)L一直不回收(辅)标记清除机制(markandsweep)**目的:**解决......
  • python里的简洁操作
    1、lambda匿名函数好处精简代码,lambda省去了定义函数,map省去了写for循环过程:res=list(map(lambdax:'test'ifx==''elsex,a))    ......
  • python json用法 dump和dumps的区别;loads()和load()的区别
    json常用方法方法作用json.dumps()将python对象编码成Json字符串json.loads()将Json字符串解码成python对象json.dump()将python中的对象转化成json储存到......
  • 《零起点Python机器学习快速入门》PDF高清版下载
    《零起点Python机器学习快速入门》PDF高清版下载地址  内容简介  · · · · · ·《零起点Python机器学习快速入门》采用独创的黑箱模式,MBA案例教学机......
  • python基础——函数
    函数函数就是将一段具有独立功能的代码块整合到一个整体并命名在需要的位置调用这个名称即可完成对应的需求。函数在开发过程中,可以更高效的实现代码重用。先定义后......