Python闭包

闭包: 内部函数对外部函数作用域里变量的引用 

(闭包内的闭包函数私有化了变量, 完成了数据的封装, 类似于面向对象)

我们先看一个不是闭包函数的例子:

def func():
    print('this is the outer func')

    def func1():
        print('this is the inner func')

func()
func1()

执行到func1()报错 NameError: name 'func1' is not defined.
这是因为函数内变量的生命周期为函数执行期间, 执行完func()时,func1()生命周期已经结束

下面定义一个闭包函数func():

def func():
    a = 1
    print('this is the outer func')

    def func1(num):
        print('this is the inner func')
        print('result is:' num + a)

    return func1

var = func()  
print(var)    
var(1)       

执行结果: 

this is the outer func
<function func.<locals>.func1 at 0x100de7eb0>
this is the inner func
result is: 2

func()返回值为func1, 所以var其实就是func1
通过print(var)的打印结果也可证实: <function func.<locals>.func1 at 0x100de7eb0>

回到文章开头对闭包的定义:

内部函数(func1)对外部函数(func)作用域里变量(a)的引用 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值