zoukankan      html  css  js  c++  java
  • 闭包

    闭包

    定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包;

    1 def outer():
    2     x = 10
    3     def inner():  #条件一 inner就是内部函数
    4 
    5         print(x)  #条件二 引用外部环境的一个变量
    6 
    7     return inner  #结论:内部函数inner就是一个闭包
    8 
    9 outer()()  #调用outer时会返回inner

    关于闭包:闭包=内部函数+定义函数时的一个环境

    以形参的方式传入x的值

    1 def outer(x):
    2 
    3     def inner():  #条件一 inner就是内部函数
    4 
    5         print(x)  #条件二 引用外部环境的一个变量
    6 
    7     return inner  #结论:内部函数inner就是一个闭包
    8 
    9 outer(20)()  #调用outer时会返回inner

     补充:

     1 name = "老王"
     2 def foo():
     3     name = "xiaoming"
     4     def bar():
     5         name = "xiaowang"
     6         print(name)
     7         def tt():
     8             global name
     9             print(name)
    10         return tt
    11     return bar
    12 age1 = foo() #调用foo函数得到返回值bar,拿到bar的内存地址   foo()
    13 age2 = age1() #调用bar函数,打印"xiaowang",得到返回值tt,并拿到tt的内存地址   foo()()
    14 age3 = age2() #调用tt函数,将声明的全局变量打印出来   foo()()()
    15 foo()()()
  • 相关阅读:
    资源限制
    垃圾收集器
    GC日志
    happens-before
    maven相互依赖导致无法编译成功
    LVM-逻辑卷常用命令和示意图
    取消RAID5
    扩展RAID5的容量
    模拟RAID5损坏
    创建RAID5
  • 原文地址:https://www.cnblogs.com/songzhixue/p/9250480.html
Copyright © 2011-2022 走看看