当前位置: 首页 > news >正文

Pyrhon函数-装饰器第一部分250219

  • 定义一个函数,在不修改这个函数的代码的情况下,让函数执行前后会有新的内容加入
def func():
    print("func")
    return
def outer():
    def inner():
        print("new code before")
        func()
        print("new code after")
        return
    return inner
func = outer()# 执行到这一步,func指向变为inner
func()# 相当于执行inner(),而调用inner()时,打印before后,再调用第7行func(),就是又调用了inner(),如此反复,耗尽函数栈
  • 上述的写法会变成死循环,在第11行相当于修改了func函数的指向,导致反复调用outer函数
  • 上述写法要改写
def func():
    print("func")
    return [1, 2, 3]
def outer(arg):
    def inner():
        print("before")
        res = arg()
        print("after")
        return res
    return inner
func = outer(func)# 经过outer包装为闭包,括号内的func还是指向原定义的函数,等号左边func是指向了inner,左右两个func是不同的
func()# 

相关文章:

  • C程序设计(第5版)——谭浩强(2)
  • 构建简单RAG代码实现
  • java常见面试场景题
  • nodejs各版本下载地址 —— 筑梦之路
  • 【Java】泛型与集合篇 —— 泛型
  • virt-io 如何运行在 kvm windows 虚拟机上
  • rust学习三、基本类型
  • Spring框架基本使用(Maven详解)
  • 【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
  • SAM C++ TensorRT(实时图像分割)
  • 【有啥问啥】DeepSeek 技术原理详解
  • vue取消全选功能按钮注意事项
  • java机器学习计算指标动态阈值
  • Jackson使用
  • 点击unity资源文件自动展开左侧的文件路径
  • StableDiffusion学习笔记——4、模型下载和学习
  • 算法系列之搜索算法-广度优先搜索BFS
  • 提示工程(Prompt Engineering)的进阶策略与实践指南
  • 关于uniApp的面试题及其答案解析
  • 【Python】yield函数
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 人民日报社论:坚定信心、奋发有为、创新创造——写在“五一”国际劳动节
  • 习近平主持召开部分省区市“十五五”时期经济社会发展座谈会
  • A股三大股指涨跌互现:3343股收涨,两市成交超1.1万亿元
  • 欢迎回家!神十九返回舱成功着陆
  • 特朗普执政百日集会吹嘘政绩,美国消费者信心指数跌至疫情以来最低