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()()()
  • 相关阅读:
    Thread记录
    反射的学习笔记--sql语句生成
    Index was outside the bounds of the array. (Microsoft.SqlServer.Smo)
    contains 方法
    mysql connector 和 sqlserver ado.net 的区别
    javascript slice
    javascript bind
    转,SelectNodes + XPath
    jsgen 搭建
    【转】基于第一个PhoneGap(cordova)的应用详解
  • 原文地址:https://www.cnblogs.com/songzhixue/p/9250480.html
Copyright © 2011-2022 走看看