脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python中的闭包

Python中的闭包

2022-02-22 23:50一碗周 Python

这篇文章主要介绍了Python中的闭包,闭包在函数中提出的概念,简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包,下面我们一起来看看文章内容的具

1、闭包概念

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

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

2、闭包条件

闭包的条件:

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

格式如下所示:

?
1
2
3
4
5
def 外部函数():
    ...
    def 内部函数():
        ...
    return 内部函数

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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、闭包完成计数效果

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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中的闭包的文章就介绍到这了,更多相关Python闭包内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7024046042446299172

延伸 · 阅读

精彩推荐