Python编程 闭包

简介: Python编程 闭包
+关注继续查看

 前言

本章将会讲解Python编程函数的闭包。


一.闭包

1.什么是闭包

当我们在外部函数中定义了一个内部函数,并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包。

前景引入:

def test_one():
    print("---1---")
 
#test_one()    #函数的调用
t_o = test_one()
print(id(test_one()))    #140726006127832
print(id(t_o))          #t_o变量指向了test_one函数的调用   140726006127832
# t_o()   报错

2.闭包的定义需要满足以下三个条件:

  1. 在一个外函数中定义了一个内函数
  2. 内函数里运用了外函数的临时变量
  3. 并且外函数的返回值是内函数的引用
def test(number):       #number 形参 临时变量
    print("--1--")
 
    def test_in(number_in):
        print(number_in)
        print("--2--")
        return number_in + number
 
    print("--3--")
    return test_in
 
#执行完毕时 结果--1-- --3--  并且函数里面的变量会被释放(number)
res = test(20)     #res = test_in
res1 = res(25)            #test in()
print(res1)        #45 说明在外层函数执行完毕时,number并没有被释放,而是继续给内层函数使用。

aaa8fade44934d748eb40068e0936900.png

 从上自下执行,碰到test(20)执行test里面内容输出--1-- 再向下执行输出--3--,返回test_in检测到了还有内层函数,将test_in返回时将临时变量与内层函数进行了绑定,绑定后继续向下执行返回到函数调用处res ,res相当于test_in ,我们想调用内层函数使用res进行调用执行res1=res(25) 输出了25 输出了--2--,使用到了number,从而证明产生了闭包。

 总结:

  • 闭包它是一种现象
  • 一般情况下,外函数执行完毕时,临时变量会被释放。
  • 但此时,外函数发现自己的临时变量会在将来被使用,
  • 所以外函数结束的时候,在返回内函数引用的同时,将外函数的临时变量与内函数进行绑定。
  • 这也是为什么当外函数结束,但内函数仍然可以使用外函数临时变量的原因。


目录
相关文章
|
2天前
|
存储 IDE 开发工具
“代码驭宠而行“:探索Python的魔法世界,开启编程奇幻之旅!
“代码驭宠而行“:探索Python的魔法世界,开启编程奇幻之旅!
|
2天前
|
Python
Python的Lambda函数: 一把极简编程的瑞士军刀
Python的Lambda函数: 一把极简编程的瑞士军刀
14 0
|
4天前
|
人工智能 IDE 开发工具
走近Python编程的“BUG”世界
走近Python编程的“BUG”世界
11 0
|
12天前
|
JavaScript 前端开发 Java
入门Python编程:了解计算机语言、Python介绍和开发环境搭建
入门Python编程:了解计算机语言、Python介绍和开发环境搭建
26 0
|
12天前
|
Python
【python基础知识】8.编程思维:如何解决问题-思维篇
【python基础知识】8.编程思维:如何解决问题-思维篇
20 0
【python基础知识】8.编程思维:如何解决问题-思维篇
|
13天前
|
数据采集 Python
Python创始人亲自推荐,238万人在学,作者:学不会我退出编程界
相信很多人都是听过一句话,“爬虫爬的好,监狱进的早”!虽然有点夸张的感觉,但是这也侧面说明,如果学会了爬虫,可以做的还是挺多的,这也是为什么越来越多的人开始学习Python,学习爬虫的原因了。
14 0
|
25天前
|
数据可视化 开发者 UED
【Python入门系列】第八篇:Python中GUI编程和图形界面设计
Python中的GUI编程是指使用Python语言创建图形用户界面(GUI)的过程。通过GUI,用户可以与程序进行交互,通过按钮、菜单、文本框等控件来操作程序。
38 0
|
26天前
|
程序员 Shell Python
【从零学习python 】03. Python交互式编程及注释详解
【从零学习python 】03. Python交互式编程及注释详解
38 0
|
26天前
|
存储 开发者 Python
【从零学习python 】04. Python编程基础:变量、数据类型与标识符
【从零学习python 】04. Python编程基础:变量、数据类型与标识符
22 0
|
1月前
|
存储 JSON 数据格式
【python】IO编程
【python】IO编程
37 0
相关产品
云迁移中心
推荐文章
更多