函数的嵌套和作用域链,闭包

函数嵌套:  #指在第二个函数里面调用第一个函数的结果

def func():

  print(‘sss‘)

def func1(f):

  f()

func1(func)

作用域链:   #最内层的函数可以调用并且更改其他函数内的代码变量但是只限制于函数这个作用域内的变量  全局的变量不能被内部函数调用 否则会报错

        #除非声明global 全局变量  全局变量一般不会经常使用 因为会影响整个局面

        

def func():

  a = 1

  def func1():

   a +=1

   print(a)

  func1()

func()

其中函数名字可以作为参数的实参,也可以赋值给其他变量,也可以作为容器名字也就是内存地址

globals 无论放在函数外边还是里边它都是查找全局的内存地址

locals  放在某个函数的里边查找的是这个函数内的所有变量  如果放在函数的最外边则与globals一样差的是全局内的所有变量

闭包:

def func():

  a = 1

  def func1():

    print(a)

  return func1

aa  = func()

aa()

#  闭包必须嵌套函数 ,也必须是内部函数调用外部函数的变量

#闭包的好处是避免一个函数执行结束后会释放前面的变量或者代码 不用重复定义某个变量,节省内存

原文地址:https://www.cnblogs.com/yuexijun/p/9750341.html

时间: 2024-11-10 08:15:47

函数的嵌套和作用域链,闭包的相关文章

函数的嵌套和作用域链

1: # 函数的嵌套调用 def max(a,b): return a if a>b else b def Max(x,y,z): c = max(x,y) return max(c,z) print(Max(5,2,0)) def max(a,b): return a if a>b else b def Max(x,y,z): c = max(x,y) return c if c>z else z print(Max(5,2,0)) 2: #函数的嵌套定义 #内部函数可以使用外部函数的

函数_函数进阶_闭包和函数的嵌套和作用域链

#闭包:嵌套的函数,内部函数调用外部函数的变量 # def outer():# a = 1# def inner():# print(a)# # print(inner.__closure__) #说明是一个闭包# return inner## inn = outer()## inn() #在一个函数的外部使用内部的函数 #使用闭包的好处就是随意的使用变量 import urllib #模块# from urllib.request import urlopen# ret = urlopen("

day12函数的命名空间,作用域,闭包等

一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c = 5 if a>b else 10 # print(c) 二.函数的命名空间 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的

函数执行时的作用域链和活动对象是怎么形成的及与闭包的关系

函数执行时的作用域链和活动对象是如何形成的及与闭包的关系1.javascript解析器启动时就会初始化建立一个全局对象global object,这个全局对象就 拥有了一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,所有程序中定义的全局变量都是这个全局对象的属性.在客户端javascript中,Window就是这个javascript的全局对象. 2.当javascript执行一个function时,会生成一个对象,称之为call object,functio

python------函数嵌套及作用域链

python------函数嵌套及作用域链 1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储"变量名与值的关系"的空间叫做全局命名空间  局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间 内置命名空间:内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟

JavaScript this 局部变量全局变量 作用域 作用域链 闭包

从阮老师博客的一道测试题说起: 代码段一: var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); 代码段二: var name = "The Window"; var object

函数的嵌套和作用域

函数的嵌套定义 ①内部函数可以使用外部函数的变量 作用域链 在内部函数使用变量时,是从小局部到大局部到全局到内置名字的过程中一级一级网上找,找到最近的一个就使用 nonlocal a 声明一个上层局部变量,往上走一级离得最近并且有a 1.对全局无效 2.对局部的最近的一层产生影响 闭包嵌套函数,内部函数调用外部函数的变量 不调用不是闭包是嵌套 def outer() a = 1 def inner(): print(a) outer() 闭包的应用 可以保护变量,保护上一级局部变量中a = 1

作用域 作用域链 闭包 思想 JS/C++比较

首先,我说的比较是指JS中这种思想/实现方式与C++编译原理中思想/实现方式的比较 参考链接:(比较易懂的介绍,我主要写个人理解) 作用域链: http://www.cnblogs.com/dolphinX/p/3280876.html 闭包:http://kb.cnblogs.com/page/110782/ 个人理解: 作用域链: 在JS中,function也是一种object的实例. 作用域的概念必须已经知晓. 作用域链:用于标识符解析:确定数据的存储位置以及数据作用域(数据访问).(应该

javascript-词法作用域规则-作用域链-闭包运用学习心得

虽然在平时貌似,很习以为常的一些用法但是真要弄清这几个概念的时候,确实费了很大功夫,现在虽然不能说明白但总算有了一些心得.好吧下面直接开始 注本文(*)为相关链接 例子1.1 词法作用域规则:函数的嵌套关系是定义时决定的,而非调用时决定的,即词法作用域,即嵌套关系是由词法分析时确定的,而运行时决定. (*)http://blog.csdn.net/zzulp/article/details/8144520 (*)http://www.cnblogs.com/lhb25/archive/2011/