首页 > 其他分享 >函数对象、装饰器、闭包函数

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

时间:2024-05-20 12:29:32浏览次数:13  
标签:闭包 outer 函数 add time 装饰 def

函数对象

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()

# 装饰器的语法糖

标签:闭包,outer,函数,add,time,装饰,def
From: https://www.cnblogs.com/yi416/p/18201639

相关文章

  • Oracle ORA-06575: 程序包或函数WM_CONCAT处于无效状态
    ------OracleORA-06575:程序包或函数WM_CONCAT处于无效状态----失效原因:版本不支持,WM_CONCAT是oracle的非公开函数,并不鼓励使用,新版本oracle并没有带此函数,需要手工加上。--首先使用dba账号登录oracle数据库sqlplussys/sysassysdba--解锁wmsys用户(可以是你自己定义的......
  • lodash已死?radash库方法介绍及源码解析 —— 函数柯里化 + Number篇
    写在前面tips:点赞+收藏=学会!主页有更多其他篇章的方法,欢迎访问查看。本篇我们继续介绍radash中函数柯里化和Number相关的方法使用和源码解析。函数柯里化chain:创建一个函数链并依次执行使用说明功能描述:用于创建一个函数链,该链依次执行一系列函数,每个函数的输出......
  • 当装饰者模式遇上Read Through缓存,一场技术的浪漫邂逅
    在《经验之谈:我为什么选择了这样一个激进的缓存大Key治理方案》一文中,我提到在系统中使用的缓存是旁路缓存模式,有读者朋友问,有没有用到过其他的缓存模式,本文将结合一个我曾经工作中的案例,使用装饰者模式实现ReadThrough缓存模式,助你轻松掌握设计模式和缓存。一、缓存模式不说废......
  • 终于搞懂了!原来 Vue 3 的 generate 是这样生成 render 函数的
    前言在之前的面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?文章中讲了transform阶段处理完v-for、v-model等指令后,会生成一棵javascriptAST抽象语法树。这篇文章我们来接着讲generate阶段是如何根据这棵javascriptAST抽象语法树生成render函数字符串的,本文中使用的v......
  • 数据库中了解的知识点:视图、触发器、事务、存储过程、函数、流程控制、索引
    【视图】1什么是视图?2视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接用3其实视图也是表45为什么要用视图?6如果要频繁的操作一张虚拟表,就可以制作成视图,下次可以直接操作78如何操作9#固定语法10createview......
  • x64 环境下_findnext() 函数报错——0xC0000005: 写入位置 0xFFFFFFFFDF47C5A0 时发生
    CSDN搬家失败,手动导出markdown后再导入博客园最近在搞单目相机位姿估计,相机标定参考了【OpenCV3学习笔记】相机标定函数calibrateCamera()使用详解(附相机标定程序和数据)提供的代码。/*@paramFile_Directory为文件夹目录@paramFileType为需要查找的文件类型@param......
  • opencv imshow 函数显示 float64 格式错误_cv2_imshow float
    CSDN搬家失败,手动导出markdown后再导入博客园在模拟高斯光斑的过程中,手动生成了下图所示的图像,使用cv2.imwrite()函数保存正常。![[output/attachments/fa4dbbeff2a5a1f2f99acd241f220fc7_MD5.png]]然而在使用cv2.imshow()函数显示时却出现错误![[output/attachments/e80ba8......
  • excel中stdev与stdevp函数的区别
    STDEVP和STDEV的区别是什么-CSDN博客STDEVP和STDEV都是Excel函数,用于计算一个样本的标准差。但是它们有一个重要的区别:STDEVP函数使用总体样本的样本数,而STDEV函数使用实际样本的样本数。举个例子,假设你有一个样本,其中有10个数据点。如果你使用STDEVP函数计算标准差......
  • WPS 表格使用与常用函数
    参考职场必用的9个表格函数20个常用函数及18个常用快捷键rank怎么锁定范围合集·Excel轻教程ExcelVBA入门到精通详细教程环境软件/系统版本说明WindowsWindows10专业版22H219045.4291WPS2024春季更新(16417)正文参考连接已非常清晰,不再cv。......
  • Pyqt6&PySide6 事件与事件的处理函数
    什么是事件?事件是程序收到外界的输入,处于某种状态时自动发送的信号。事件有固定的类型,每种类型有自己的处理函数,用户只要重写这些函数,即可达到特定的目的。通过事件可以用一个控件监测另外一个控件,并可过滤被监测控件发出的事件。事件的类型与处理函数事件的概念与实列外界对P......