python中 [ 闭包 ] 小结

什么是闭包?

多层函数嵌套,(函数里面还有定义函数,一般是两个),往往内层函数会用到外层函数的变量,把内层函数以及外部函数的变量当成一个特殊的对象,这就是闭包。闭包比面向对象更纯净、更轻量,既有数据又有执行数据的代码;比普通函数功能更强大,不仅有代码还有数据

# 定义一个函数
def test(number):

    # 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
    def test_in(number_in):
        print("in test_in 函数, number_in is %d" % number_in)
        return number+number_in
    # 其实这里返回的就是闭包的结果
    return test_in


# 给test函数赋值,这个20就是给参数number
ret = test(20) # test()的返回值为内层函数,所有现在ret指向内层函数

# 注意这里的100其实给参数number_in
print(ret(100))  # 给内层函数传值

#注 意这里的200其实给参数number_in
print(ret(200))  # 给内层函数传值

运行结果:

in test_in 函数, number_in is 100
120

in test_in 函数, number_in is 200
220
此时内层函数用到了外层函数的变量,也可以对其进项修改(不可变类型时)

关键字: nonlocal

nb = 0  # 定义一个全局变量

def test1(num=0):  # 默认参数
    def test2():
        global nb  # 在内层函数中修改全局变量时依然使用global声明
        nonlocal num  # 在内城函数中修改外层函数的变量时使用新的关键字:nomlocal
        nb += 2
        num += 1
        return  nb,num
    return test2

t1 = test1() # t1指向内层函数
print(t1())  
# 运行结果为 (2, 1)

匿名函数、普通函数、闭包、面向对象的区别?

1). 匿名函数能够完成基本的简单功能,传递是这个函数的引用 只有功能。

2). 普通函数能够完成较为复杂的功能,传递是这个函数的引用 只有功能。

3). 闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,占用资源比较小

4). 对象能够完成最为复杂的功能,传递是数据+功能,但占用大量空间,浪费资源。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值