“闭包”是什么?| Python 主题月

简介: “闭包”是什么?| Python 主题月

什么是闭包


Python中的闭包是一个比较模糊的概念,有很多朋友都认为不好理解,但是随着深入学习,就会发现闭包无论如何都是需要去理解的,下面我将自己对闭包的理解进行阐述,希望能够对你有所帮助 ~


我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。


闭包的格式


如下:


def 外层函数(参数):
    def 内层函数():
        print("内层函数执行", 参数)
    return 内层函数
内层函数的引用 = 外层函数("传入参数")
内层函数的引用()
复制代码


外层函数中的参数,不一定要有,据情况而定,但是一般情况下都会有并在内函数中使用到


闭包的实例


如下:


def outfunc(a):   # 定义外函数
    def infunc(b):  # 定义内函数
        return a*b  # 内函数的返回值
    return infunc   # 外函数的返回值,返回内函数的对象
func_instance = outfunc(8)   # 外函数的实例,是一个function对象
print(type(func_instance))   # 打印外函数实例的类型
res = func_instance(10)      # 外函数实例的调用
print(res)
复制代码


输出


➜  test git:(master) ✗ python3 testpy.py
<class 'function'>
80
复制代码


在上面的代码中,内函数直接使用了外函数的变量值,那如果想要在内函数中对外函数的变量值进行修改,怎么操作呢?


修改外函数的变量值


想要修改外函数的变量值,需要用到nonlocal关键字。


def outfunc(a):
    def infunc(b):
        nonlocal a
        a = a*2
        return a*b
    return infunc
func_instance = outfunc(8)
print(type(func_instance))
res = func_instance(10)
print(res)
复制代码


输出


➜  test git:(master) ✗ python3 testpy.py
<class 'function'>
160
复制代码


如上即可。


闭包的使用场景


Python中,闭包的主要用途就是用于装饰器的实现。后续讲解。

还有就是可以简化参数重复传递,比如:


def add(a,b,c):
    print(a*b*c)
add(1,2,1)
add(1,2,2)
add(1,2,3)
add(1,2,4)
add(1,2,5)
复制代码


输出


➜  test git:(master) ✗ python3 testpy.py 
2
4
6
8
10
复制代码


你会发现,a和b是固定不变的,我们怎么样才能减少a和b的传参,而只改变c的值呢?这个时候闭包就起到了作用。


def addNew(a,b):
    def addC(c):
        return a*b*c
    return addC
func_ins = addNew(1,2)
print(func_ins(1))
print(func_ins(2))
print(func_ins(3))
print(func_ins(4))
print(func_ins(5))
复制代码


输出


➜  test git:(master) ✗ python3 testpy.py
2
4
6
8
10
相关文章
|
1月前
|
数据采集 自然语言处理 算法
如何使用Python的Gensim库进行自然语言处理和主题建模?
使用Gensim库进行自然语言处理和主题建模,首先通过`pip install gensim`安装库,然后导入`corpora`, `models`等模块。对数据进行预处理,包括分词和去除停用词。接着,创建字典和语料库,使用`Dictionary`和`doc2bow`。之后,应用LDA算法训练模型,设置主题数量并创建`LdaModel`。最后,打印每个主题的主要关键词。可以根据需求调整参数和选择不同算法。
26 0
|
3月前
|
存储 Python
Python 的其他主题:解释 Python 中的命名空间(Namespace)是什么?
Python 的其他主题:解释 Python 中的命名空间(Namespace)是什么?
|
4月前
|
Python
Python 高级主题:什么是 Python 中的装饰器函数?
Python 高级主题:什么是 Python 中的装饰器函数?
|
3月前
|
Python
Python 的其他主题:什么是 Duck Typing?Python 中如何使用 Duck Typing?
Python 的其他主题:什么是 Duck Typing?Python 中如何使用 Duck Typing?
|
3月前
|
Python
Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
|
24天前
|
人工智能 机器人 测试技术
【python】python闭包的详细解读(傻瓜式教学)
【python】python闭包的详细解读(傻瓜式教学)
|
1月前
|
存储 程序员 Python
Python教程第9章 | 通俗易懂学闭包
本文通过一个需求探讨闭包的基本概念与用法,帮助快速理解闭包。
15 0
|
2月前
|
自然语言处理 安全 Python
Python中的闭包和高阶函数详解
Python中的闭包和高阶函数详解
|
2月前
|
Python
在Python中,如何创建和使用闭包?
在Python中,如何创建和使用闭包?
|
2月前
|
自然语言处理 Python
在Python中,什么是闭包?
在Python中,什么是闭包?