Python——闭包

1.什么是闭包?

闭包(closure)是函数式编程的重要的语法结构。

       在程序的编写过程中,我们没有太多心思去顾虑各个变量是否冲突,所以有了闭包的方法。我个人理解闭包就是把原本要在全局声明的变量变成局部声明变量,这样在每个函数中我们可以声明和其他函数中名称相同的变量,当然在Python中普通函数也可以。

       而两者的区别是:闭包函数的返回值和变量在函数调用过后不会释放掉,而普通函数就会释放掉,我们还可以在后续程序中随时调用和操作该函数的返回值。而且我们在函数内部声明的局部变量可以当作全局变量在函数外部进行操作和访问。

2.闭包有什么作用?

闭包可以用在许多地方。它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在调用后被自动清除。

3.闭包的写法.

局部变量当作全局变量的体现:

拿一段程序来说

def outer(a,b):

      def inner(c):

             return a*c+b

      return inner


outer1 = outer(2,3)

outer2 = outer(10,20)

print(outer1(5), outer2(10))

此时输出的结果为13和120

可见在调用函数时,我们在函数外部操作了outer函数内部的变量,此时该变量是以全局变量的形式存在的。

避免变量名称冲突的体现:

如下程序:

def outer():

      a = []

      def inner(msg):

            a.append(msg)

            print(a)

      return inner

def outer1():

      a = []

      def inner1(msg):

            a.append(msg)

            return a

      return inner1

a= outer()

a("人面桃花相映红")

a= outer1()

print(a("为伊消得人憔悴"))

在上述程序中,虽然程序末尾调用函数时,两个不同的函数把返回值都赋给了相同的变量a,但是在闭包函数中,这两个a是不冲突的,后来的a并不会像普通函数一样覆盖上面程序中的变量a,所以输出结果为    ['人面桃花相映红'],['为伊消得人憔悴']

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概念 闭包(closure)是一种引用了非局部变量(non-local variable)的内嵌函数(nest...
    王吉吉real阅读 4,853评论 0 0
  • 我在博客中曾经介绍过两篇关于函数的文章,第一篇是 关于 Python 函数是第一类对象,第二篇是关于 Lambda...
    liuzhijun阅读 5,399评论 2 27
  • 闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是...
    Mr_Chen阅读 2,463评论 0 1
  • 什么是闭包 在维基中,闭包的解释是这样的: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Cl...
    Syfun阅读 4,866评论 0 52
  • 有一个人,自己在家最后死了
    这家伙有毒阅读 988评论 0 0