您现在的位置是:群英 > 开发技术 > Python语言
python闭包的概念和条件是什么?有什么用?
Admin发表于 2021-12-06 18:03:511408 次浏览

    这篇文章给大家分享的是python闭包的相关内容,一些刚接触python闭包的朋友可能对于闭包概念、闭包条件、闭包的缺点及作用等等这些不是很了解,对此本文就给大家讲讲什么是闭包,文中介绍的非常详细,感兴趣的朋友接下来跟随小编一起学习一下吧。

1、闭包概念

    闭包在函数中提出的概念,简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。实际上闭包可以看做一种更加广义的函数概念。因为其已经不再是传统意义上定义的函数。

    闭包这个概念不仅仅只有在Python中存在,在任何一个编程语言中都几乎存在。

2、闭包条件

    闭包的条件:

  • 外部函数中定义了内部函数
  • 外部函数是有返回值
  • 返回值是:内部函数
  • 内部函数还引用了外部函数的变量

    格式如下所示:

def 外部函数():
    ...
    def 内部函数():
        ...
    return 内部函数

    示例代码:

def func():
    a = 100

    def inner_func():
        b = 200
        print(a, b)

    return inner_func


x = func()
print(x)  # <function func.<locals>.inner_func at 0x0000021704CD9620>
x()  # 100 200
# 这样就可以直接调用inner_func函数,如果return不返回一个内部函数的话是不会有任何输出的

3、闭包完成计数效果

    使用闭包还可以完成计数器的效果

def generate_count():
    container = [0]

    def add_one():
        container[0] += 1
        print(f"这是第{container[0]}次调用")

    return add_one


count = generate_count()
count()  # 这是第1次调用
count()  # 这是第2次调用
count()  # 这是第3次调用

4、闭包的缺点及作用

    闭包的缺点如下所示:

  • 作用域没有那么直观
  • 因为变量不会被垃圾回收所以有一定的内存占用问题。

    闭包的作用如下所示:

  • 可以使用同级的作用域
  • 读取其他元素的内部变量
  • 延长作用域

    现在大家对于闭包概念、闭包条件、闭包的缺点及作用等等这些应该都清楚了吧,上述示例有一定的借鉴价值,有需要的朋友可以参考学习,希望对大家学习python闭包有帮助,想要了解更多大家可以关注群英网络其它相关文章。

文本转载自脚本之家

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: python闭包
相关信息推荐
2022-01-26 18:39:35 
摘要:这篇给大家分享两个Java相关的面试题,题目及解答如下,文中的介绍很详细,对大家学习或工作都有帮助,有需要的朋友可以参考了解看看,接下来我们一起来学习一下吧。
2022-01-29 17:58:21 
摘要:这篇文章我们来了解Python停止线程的方法,在了解停止线程的方法之前我们会先了解启动线程的方法,下文有详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
2022-05-10 15:03:18 
摘要:本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于数组的相关问题,包括了数组的定义、数组的属性以及内存图还有常见的一些问题,下面一起来看一下,希望对大家有帮助。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部