函数对象、装饰器、闭包函数

函数对象

Python中一切皆对象

【1】可以直接被引用

定义一个函数用一个新的变量名来存,用新的变量名来调用

【2】可以作为元素被储存

功能字典的函数地址

【3】函数可以作为参数传递给另一个函数

将函数的内存地址作为参数传递

【4】函数的返回值可以是函数

直接将函数的内存地址返回

闭包函数

  • 闭包函数就是对外界作用域有引用的函数
  • 内嵌函数对外部函数有引用,那这个内嵌函数就叫闭包函数
def outer():
    a = 1
    def inner():
        print(a)
        
整个outer就叫做闭包函数

闭包函数的应用

  • 装饰器
  • 函数工厂模式
  • 封装

闭包函数就是内嵌函数对外部函数作用域有引用的函数

def outer():
    def inner():
        print("hello world")
    return inner
res = outer()
print(res())

time模块

可以用来获取时间

import time
def add():
    time.sleep(3)

def delete():
    time.sleep(4)

def outer(func):
    func = func

    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"{end_time - start_time} s")

    return inner

add = outer(add)
add()

装饰器就是在不改变原来函数调用方式的基础上增加额外的新功能

import time
def outer(func):
    func = func

    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"{end_time - start_time} s")

    return inner

@outer # add = outer(add)
def add():
    time.sleep(3)


def delete():
    time.sleep(4)

add()

# 装饰器的语法糖
posted @   随机昵称yi  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示