当前位置:   article > 正文

Python闭包详解_python闭包函数详解

python闭包函数详解

是的,在Python中也有闭包的概念。闭包是指在一个内部函数中引用了外部函数的变量,并且可以在外部函数执行结束后继续访问和操作这些变量。

以下是一个简单的闭包示例:

def outer_function(x):

    def inner_function(y):

        return x + y

    return inner_function

 

closure = outer_function(10)

result = closure(5)

print(result)  # 输出 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在上面的代码中,`outer_function`是一个外部函数,它接收一个参数`x`。在`outer_function`内部定义了一个内部函数`inner_function`,它引用了外部函数的变量`x`。最后,`outer_function`返回了`inner_function`,形成了一个闭包。

当我们调用`outer_function(10)`时,它返回了一个闭包`inner_function`,其中的`x`被设置为10。然后,我们通过调用`closure(5)`来执行闭包,它将内部函数的`y`参数设置为5,并返回`x + y`的结果。

闭包的特点是,即使在外部函数执行结束后,闭包仍然可以访问和操作外部函数的变量。这是因为闭包中的变量被保存在闭包的环境中,不会被垃圾回收。这使得闭包非常有用,尤其是在需要保留某些状态或数据的情况下。

闭包在编程中有着广泛的应用,以下是一些闭包的常见用途:

1. 保留状态:闭包可以用来保留函数的内部状态,即使函数已经执行完毕。这样可以在后续调用中继续访问和修改这些状态,实现状态的持久性和共享。

2. 数据封装:闭包可以用来创建一个封装了数据和操作的对象。通过将数据存储在闭包中,并通过闭包的方法来操作和访问数据,可以实现面向对象的编程风格。

3. 回调函数:闭包可以作为回调函数使用,用于处理异步操作的结果。当异步操作完成后,闭包可以访问并处理操作的结果。

4. 延迟计算:闭包可以用来延迟计算,即在需要时才进行具体的计算操作。通过保存计算所需的参数和上下文,闭包可以在需要时进行计算,并返回结果。

5. 实现装饰器:闭包可以用来实现装饰器,即在不修改原函数代码的情况下,给函数添加额外的功能。通过在闭包中调用原函数,并根据需要执行其他操作,可以轻松地实现装饰器模式。

闭包的灵活性和强大功能使其成为解决许多编程问题的有效工具。它可以提供更高级别的抽象和控制,同时保持代码的简洁性和可读性。

让我们通过一个例子来对比闭包和普通函数的差异。

假设我们有一个计算平均数的函数,我们可以使用普通函数来实现:

def average(numbers):

    total = sum(numbers)

    return total / len(numbers)

 

result = average([1, 2, 3, 4, 5])

print(result)  # 输出 3.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在上面的代码中,`average`函数接收一个列表作为参数,并返回平均值。这是一个普通函数,它仅在调用时才会执行具体的计算操作。

现在,我们可以使用闭包来实现同样的功能:

def make_average():

    total = 0

    count = 0

 

    def average(number):

        nonlocal total, count

        total += number

        count += 1

        return total / count

 

    return average

 

avg = make_average()

result1 = avg(1)

result2 = avg(2)

result3 = avg(3)

print(result1, result2, result3)  # 输出 1.0 1.5 2.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

在上面的代码中,我们创建了一个`make_average`函数,它返回一个内部函数`average`。该内部函数引用了外部函数的变量`total`和`count`,并在每次调用时更新它们的值。这是一个闭包,因为`average`函数可以在`make_average`函数执行结束后继续访问和修改外部函数的变量。

现在,我们可以通过调用`make_average`函数来创建一个闭包,然后使用它计算一系列数字的平均值。每次调用时,平均值都会根据之前的数字进行更新。

通过比较上述两段代码,可以看出闭包具有一些优点。它可以保留状态并在多次调用之间共享数据,从而减少了重复计算和传递参数的开销。同时,闭包也提供了更高级别的抽象和可复用性,可以在不同的上下文中使用。

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/855882
推荐阅读
相关标签
  

闽ICP备14008679号