作用域

[Python] 命名空间&作用域

走远了吗. 提交于 2020-01-30 00:07:35
Python的类语句不会创建实例 类会创建命名空间,通过对象访问类的属性和方法 类不会创建作用域,对方法和属性的引用必须加以限定(如在方法中必须通过self引用实例的属性) class My1(): my1 = "My1bianliang" def __init__(self): print("My1gouzao") def __del__(self): print("My1xigou") class My2(): def __init__(self): print("My2gouzao") my1=My1() 结果: >>My1gouzao 说明没有创建作用域,只是了对象执行创建,没有析构 参考: Python 五个知识点搞定作用域: http://python.jobbole.com/86465/ Python函数的作用域和引用范围: https://www.cnblogs.com/saintdingspage/p/7788958.html Python 变量作用域: https://blog.csdn.net/mldxs/article/details/9250733 Python中的作用域及global用法: https://www.cnblogs.com/summer-cool/p/3884595.html 详解python命名空间和作用域: https://www

【ES6】let 命令

天大地大妈咪最大 提交于 2020-01-29 21:08:57
let命令 为es6新增命令, 用来声明变量 ,类似于 var ,但是 let 所声明的变量,只在 let 命令所在的 块级作用域 内有效 块级作用域写法( ES6块级作用域允许任意嵌套 ): // 块级作用域写法 { let tmp = ...; ... } 块级作用域 例1 for (let i = 0; i < 10; i++) { // ... } console.log(i);//ReferenceError: i is not defined 解析:上面代码中, i 的 作用域 是 for 循环体内,在循环体外引用就会报错。 块级作用域 例2 function f1() { let n = 5; if (true) { let n = 10; } return n }console.log(f1())//5 解析:栗子说明, 外层代码块不受内层代码块的影响。 --------------------------------------------------------------------------------------------------------------------------------- let与var的区别 1.var 没有块级作用域,let有块级作用域 var实例 var a = []; for (var i = 0; i < 10; i+

{JavaScript}栈和堆内存,作用域

穿精又带淫゛_ 提交于 2020-01-29 11:28:20
1.栈 stack”和“堆 heap”: 简单的来讲,stack上分配的内存系统自动释放,heap上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。stack一般是静态分配内存,heap上一般是动态分配内存。 2.基本类型和引用类型: 基本类型:存放在栈内存中的简单数据段。数据大小确定,内存空间大小可以分配。 引用类型:存放在堆内存中的对象,变量中实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。 详见《Javascript高级编程》Page60页的图可以很清晰的理解上面两个概念。 3.内存变量的存储空间: 这是js机制生存的原因。只有理解这种存储空间的分配才可以更好的理解js和写出更加高效的代码。 4.值传递和引用传递问题: 前者内存中的值不发生变化,后者内容中的值发生变化。 将js中的function(){} 函数的参数理解成局部变量,只有在function里面是有作用的。 5.执行环境(作用域) 1. 执行环境决定了变量的生命周期,一些代码可以访问变量的权限。这种机制有助于何时释放内存。 2.分全局执行环境(window)和函数执行环境。 3.函数的局部环境可以访问函作用域的变量,而且有权访问包含(父)环境中的变量 4.全局环境不能访问函数环境中的变量。 6.JS是一门具有自动垃圾回收机制的语言

JavaScript执行环境作用域

戏子无情 提交于 2020-01-29 05:35:52
执行环境 JavaScript中的执行环境定义了变量或函数有权访问的其他数据,决定了他们的各自行为。每个执行环境都有与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。 全局执行环境是最外围的一个执行环境。 在JavaScript中,每个函数都有自己的执行环境,当执行流进入一个环境时,函数的环境就会被推入一个环境栈中;当函数执行完毕后,栈将环境弹出,把控制权交给之前的执行环境。 作用域链 当代码在一个环境中执行,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用链最前端,始终都是当前执行的代码所在的环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象,活动对象最开始只包含一个变量,即arguments对象(这个对象在全局不存在),作用域链中的下一个对象来自包含(外部)环境,而再下一个对象来自下一个包含环境,全局执行环境是作用域链中最后一个对象。 let color = 'green' function change ( ) { if ( color === 'green' ) { color = color + ' cap' } } change ( color ) console . log ( color ) //green cap 在这个例子中,函数change的作用域链包括两个对象

Spring中Bean的作用域

こ雲淡風輕ζ 提交于 2020-01-29 04:41:16
Bean作用域 作用域描述 singleton 在每个Spring IoC容器中一个bean定义对应一个对象实例。整个容器中只有该bean的唯一实例 prototype 一个bean定义对应多个对象实例。 request 在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext 情形下有效。 session 在一个HTTP Session 中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext 情形下有效。 global session 在一个全局的HTTP Session 中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext 情形下有效。 ApplicationContext 实现的默认行为就是在启动时将所有 singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分, ApplicationContext 实例会创建并配置所有的 singleton bean。通常情况下这是件 好事 ,因为这样在配置中的任何错误就会即刻被发现

函数进阶

蹲街弑〆低调 提交于 2020-01-29 04:23:47
一、名称空间和作用域 存放名字与值的关系’的空间起了一个名字-------命名空间。 代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做 全局命名空间; 在函数的运行中开辟的临时的空间叫做 局部命名空间 在python之禅中提到过:命名空间是一种绝妙的理念,让我们尽情的使用发挥吧! 二、名称空间的分类以及加载和调用顺序 命名空间一共分为三种:   全局命名空间   局部命名空间   内置命名空间 *内置命名空间 中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。 三种命名空间之间的加载与取值顺序: 加载顺序: 内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载) 取值顺序:   在局部调用:局部命名空间->全局命名空间->内置命名空间   在全局调用:全局命名空间->内置命名空间 综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。 作用域 作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。 全局作用域:包含 内置名称空间、全局名称空间 ,在整个文件的任意位置都能被引用、全局有效 globals和locals方法 print(globals()) print(locals()) def func()

执行环境及作用域

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-29 01:29:02
全局执行环境是最外围的一个执行环境。在WEB浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。 当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的对象。如果这个环境是函数,则将其活动对象作为变量对象。活动对象最开始时只包含一个变量,即arguments对象(这个对象在全局环境中是不存在的)。作用域链中的下一个对象来自包含环境,而再下一个变量对象则来自下一个包含环境。这样一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。 标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯,直至找到标识符为止。 每个环境都可以向上搜索作用域链,以查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。 延长作用域链 ,就是在作用域链的前端临时增加一个变量对象

272 第1章 作用域是什么

拜拜、爱过 提交于 2020-01-28 21:22:17
几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个 值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。 尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。 总结:变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如 果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对 它赋值。 var a = 2;--> 编译器声明,引擎赋值。 作用域 引擎的另一位好朋友,负责收集并维护由所有声明的标识符(变量)组成的一系列查 询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。 作用域是根据名称查找变量的一套规则。 遍历嵌套作用域链的规则很简单:引擎从当前的执行作用域开始查找变量,如果找不到, 就向上一级继续查找。当抵达最外层的全局作用域时,无论找到还是没找到,查找过程都 会停止。 function foo(a) { console.log(a + b); // VM19:2 Uncaught ReferenceError: b is not defined b = a; } foo(2); 相较之下,当引擎执行 LHS 查询时,如果在顶层(全局作用域)中也无法找到目标变量, 全局作用域中就会创建一个具有该名称的变量,并将其返还给引擎

python全栈开发从入门到放弃之函数进阶

ⅰ亾dé卋堺 提交于 2020-01-28 09:32:01
1、三元运算 1 a= 1 2 b=2 3 max = (a if a>b else b ) #条件成立的结果 if 条件 else 条件不成立的结果 4 print(max) 2、先上一首python之禅 1 import this 2 3 Beautiful is better than ugly. 4 Explicit is better than implicit. 5 Simple is better than complex. 6 Complex is better than complicated. 7 Flat is better than nested. 8 Sparse is better than dense. 9 Readability counts. 10 Special cases aren't special enough to break the rules. 11 Although practicality beats purity. 12 Errors should never pass silently. 13 Unless explicitly silenced. 14 In the face of ambiguity, refuse the temptation to guess. 15 There should be one-- and

Python变量作用域和引用范围

只谈情不闲聊 提交于 2020-01-27 14:25:36
变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是: L (Local) 局部作用域 E (Enclosing) 闭包函数外的函数中 G (Global) 全局作用域 B (Built-in) 内建作用域 以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。 x = int ( 2.9 ) # 内建作用域 g_count = 0 # 全局作用域 def outer ( ) : o_count = 1 # 闭包函数外的函数中 def inner ( ) : i_count = 2 # 局部作用域 Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问,如下代码: >> > if True : . . . msg = 'I am from Runoob' . . . >> > msg 'I am from Runoob' >> >