Fork me on GitHub
随笔 - 234  文章 - 49 评论 - 0 阅读 - 13万
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

闭包的含义

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包

闭包可以用来在一个函数与一组"私有"变量之间创建关联关系.在给定函数被多次调用的过程中,这些私有变量能够保持其持久性.

这种叫做嵌套函数

def func1():
    print('func1')
    def func2():
        print('func2')
    func2()

func1()

此时对于当前文件,a为全局变量,b为局部变量

a=1
def func3():
    print('func3')
    b=2
func3()
print(b)

一个函数的返回值,也可以是一个函数的引用

def func1():
    print('func1')
    def func2():
        print('func2')
    return func2
f1 = func1()
print(f1)
print(type(f1))
f1()

输出结果如下

func1
<function func1.<locals>.func2 at 0x000002B933B84CC0>
<class 'function'>
func2

如果我们有一个函数,让它可以任意的计算一个值的任意次幂等

def wapper(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of

#计算一个数字的平方
square = wapper(2)
#计算2,3,4的平方
print(square(2))
print(square(3))
print(square(4))

下面的执行结果就很像,通过wapper(2)持久化地获取到一个工具,此工具可以将任意数字的平方返回,这种写法就叫做闭包的写法
执行结果

4
9
16
posted on   anyux  阅读(8)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示