Python初级第7课——函数闭包(只读课堂)

欢迎来到“只读课堂”!

In [1]:

#这节课我们来学习闭包。

什么是闭包

内部函数对外部函数作用域里变量的引用(非全局变量 ) ,则称内部函数为闭包

一个闭包就是你调用了外部函数,外部函数返回内部函数。此时的内部函数就叫做闭包函数

闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例

In [2]:

#它有一个内部函数和一个外部函数。

In [5]:

def wai():
    a = 1
    def nei():
        print(a)
    return nei

In [6]:

#这样就生成了一个闭包

In [7]:

func = wai()

In [8]:

#这是内部函数

In [9]:

#外部函数的返回值

In [10]:

func()
1

In [11]:

#a变量就被打印出来了。

In [12]:

#但是我们在外部就不能直接打印a。

In [13]:

print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-13-bca0e2660b9f> in <module>()
----> 1 print(a)

NameError: name 'a' is not defined

In [14]:

#我们在运行完func()之后还可以再次使用a。

In [15]:

#闭包的模板代码:

def func1(num):

print(‘func1:’ num)

def func2(numl):

print(‘func2:’ num1)

return numl+num

return func2

func2 funcl(20)

res = func2(30)

In [16]:

#我们再来举个例子

In [22]:

def func(num):
    def func1(num1):
        print(num+num1)
    return func1

In [23]:

var = func(10)

In [24]:

var(20)
30

In [25]:

#为什么我们现在还可以用呢,因为我们用var把它给继承下来了。

In [26]:

#再介绍一下闭包函数有什么用处:

In [27]:

mylist = [1,2,3,4,5]

In [28]:

def func(obj):
    def func1():
        obj[0] += 1
        print(obj)
    return func1

In [29]:

var = func(mylist)

In [30]:

var()
[2, 2, 3, 4, 5]

In [31]:

#第一次是22345

In [32]:

#我们再来看一下它是不是累加的:

In [33]:

var()
[3, 2, 3, 4, 5]

In [34]:

var()
[4, 2, 3, 4, 5]

In [35]:

var()
[5, 2, 3, 4, 5]

In [36]:

#它这个闭包是累加的。

In [37]:

#再看一下我们的mylist:

In [38]:

print(mylist)
[5, 2, 3, 4, 5]

In [39]:

#var修改了,我们的变量也会修改。

In [40]:

#var就是一个充满数据的容器。

思考

闭包私有化了变量,原来需要类对象完成的工作,闭包也可以完成

由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

在 python 中,使用闭包的另一个场景就是装饰器,也叫语法糖@

In [41]:

#什么叫类对象呢

In [42]:

#类似功能-》类-》实例

本次只读课堂的python教程就到这了,欢迎下一次的收看!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值