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

Python闭包探索,释放函数记忆的秘术

引言

hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。

希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可以留言或者私信交流。

如果你想看什么主题的文章,欢迎留言交流,关注公号,领取编程资料。

闭包的概念

闭包说白了就是函数中嵌套函数,是定义在一个函数内部的另一个函数,内部函数可以访问创建时所在作用域的变量,即使外部函数已经执行完毕。闭包使得这些变量的值被保持在内存中,即使外部函数已经退出。

创建闭包

在Python中,闭包通常通过嵌套函数来创建。以下是一个简单的闭包示例:

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

# 创建闭包
closure = outer_function(10)
print(closure(5))  # 输出: 15

在这个例子中,outer_function 返回了 inner_function 函数,inner_function 可以访问 outer_function 的参数 x

闭包的应用

一个技术诞生肯定不是为了装逼,肯定是有其存在的意义。那么闭包在Python中的肯定也是有其应用的场景。

数据封装和隐私

闭包可以用来封装数据,实现类似于私有变量的功能。

def create_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter

my_counter = create_counter()
print(my_counter())  # 输出: 1
print(my_counter())  # 输出: 2

柯里化(Currying)

闭包可以用于实现函数的柯里化,即把接受多个参数的函数转换成接受单一参数(或不接受参数)的函数,并且返回接受余下参数的新函数。

def add(x):
    def inner_add(y):
        return x + y
    return inner_add

add_five = add(5)
print(add_five(3))  # 输出: 8

延迟计算

闭包可以用于延迟计算,即只在需要时才执行计算。

def lazy_computation():
    x = None
    def compute():
        nonlocal x
        if x is None:
            x = 5
        return x
    return compute

compute_lazy = lazy_computation()
print(compute_lazy())  # 第一次调用时计算
print(compute_lazy())  # 后续调用使用缓存的值

装饰器

Python中的装饰器本质上也是闭包的一种应用。

def decorator(func):
    def wrapper():
        print("Something before")
        func()
        print("Something after")
    return wrapper

@decorator
def my_function():
    print("Function executed")

my_function()

相关文章:

  • 2024年贵州特岗教师招聘报名流程,速速查收哦!
  • debian nginx upsync consul 实现动态负载
  • openwrt设置开机自启 tailscale为例
  • ZeRO-3、模型并行、流水线并行适用情况
  • 学校上课,是耽误我学习了。。
  • Leetcode刷题2
  • 【强推|双语】吴恩达机器学习Deeplearning.ai课程链接
  • OpenFeign快速入门 替代RestTemplate
  • springboot-阿里羚羊 服务端埋点
  • MySQL基础
  • 大屏幕适配方法之:transform:scale()
  • JS事件循环机制(event loop)之宏任务、微任务
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
  • Redis 事务
  • LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件
  • GeoScene产品学习视频收集
  • python系列教程224——导入只发生一次
  • 【python将字符串按‘/‘和‘\‘分割开】
  • 【DevOps】深入理解 Nginx Location 块:配置示例与应用场景详解
  • k8s node NotReady后会发生什么?
  • 解放日报:持续拿出排头兵姿态先行者担当
  • 暗蓝评《性别打结》丨拆解性别之结需要几步?
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪
  • 费高云调研党的建设工作:营造风清气正劲足的政治生态
  • 五一假期上海铁路预计发送446万人次,同比增长8.4%
  • 吕国范任河南省人民政府副省长