作用域

函数返回值与作用域

匿名 (未验证) 提交于 2019-12-02 23:49:02
有函数如下: def my_calc(x, y): res = x**y print(res) my_calc(2,5) 输出结果:32 函数可以得到我们想要的结果,并打印了。但是问题来了,我们如果想要得到并能使用这个结果,这种方式肯定不行。这个时候就需要用到返回返回值。 使用return语句就可以达到这个目的,后续的计算判断就可以直接使用data def my_calc(x, y): res = x**y return res data = my_calc(2,5) print(data) 补充: 函数在执行中遇到return语句,就会停止执行并返回结果 可以理解为 return 语句代表着函数的结束,return语句后面的语句不会被执行 如果未在函数中指定return,那这个函数的返回值为None 全局变量与局部变量 name = "第一个名字" def my_print(): name = "第二个名字" print(name) my_print() print(name) 执行结果: 第二个名字 第一个名字 为什么在函数内部改了name的值后, 在函数内部改变了 ,在外面print的时候却没有改呢? 因为这两个name根本不是一回事 第一个name是全局变量,在函数内的name是局部变量 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域

Angular 学习笔记(二)

匿名 (未验证) 提交于 2019-12-02 23:49:02
控制器:   就像 JavaScript 里的 构造函数 一般,用来增强作用域(scope),当一个控制器通过 ng-controller 指令来添加到 DOM 中时,   ng 会调用该控制器的 构造函数 来生成一个 控制器对象 ,且会创建一个 新的 子级作用域 注:在这个构造函数中,作用域会作为 $scope 参数注入其中,并允许用户代码访问它 使用控制器:   1、初始化 $scope 对象 // 设置属性 attrName 的值为 value $scope.attrName = value;   2、为 $scope 对象添加 行为 (方法) // 添加方法 func $scope.func = function([params]) {...} 任何对象(或原生类型的变量)被添加到 scope 后都将 成为 scope 的属性 ,作为数据模型供模板/视图调用 任何方法被添加到 scope 后,也能在模板/视图中通过 Angular 表达式 或是 Angular 的事件处理器 调用 注:Angular的模板是一个声明式的视图,它指定信息从模型、控制器变成用户在浏览器上可以看见的视图   1、 任何形式的 DOM 场合: 控制器只应包含业务逻辑   2、 格式化输入: 使用 Angular 表单控件代替   3、 过滤输出: 使用 Angular 过滤器代替   4、

Jmeter组件作用域及执行顺序

匿名 (未验证) 提交于 2019-12-02 23:48:02
Ŀ¼ 配置元件---Config Element 用于初始化默认值和变量,以便后续采样器使用。配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同一个作用域的任何采样器前。 前置处理器---Pre Processors 前置处理器会在采样器发出请求之前做一些特殊操作。如果前置处理器附着在某个采样器之下,那么它只会在该采样器运行之前执行。前置处理器通常用于在采样器发出请求前修改采样器的某些设置,或者更新某些变量的值(这些变量不在服务器响应中获取值)。 计时器---Timer 定时器会让作用域内的每一个采样器都在执行前等待一个固定时长,如果不设定这种延迟,JMeter可能会在短时间内产生大量访问请求,导致服务器被大量请求所淹没。如果为线程组添加了多个定时器,那么JMeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。 取样器---sample 采样器告诉JMeter发送一个请求到指定服务器,并等待服务器的请求。采样器会按照其在测试树中的顺序去执行,还可以用逻辑控制器来改变采样器运行的重复次数。 后置处理器---Post Processors 后置处理器会在采样器发出请求之后做一些特殊操作。如果后置处理器附着在某个采样器之下,那么它只会在该采样器运行之后执行

EL和JSTL

匿名 (未验证) 提交于 2019-12-02 23:43:01
EL表达式 是为了简化我们的jsp代码,具体一点就是为了简化在jsp里面写的那些java代码。 语法结构 ${expression } 从指定的作用域取参数 ${requestScope.表达式} 如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。 一直把四个作用域取完都没有, 就没有显示。 如何使用 取出4个作用域中存放的值。 <% pageContext.setAttribute("name", "page"); request.setAttribute("name", "request"); session.setAttribute("name", "session"); application.setAttribute("name", "application"); %> 按普通手段取值<br> <%= pageContext.getAttribute("name")%> <%= request.getAttribute("name")%> <%= session.getAttribute("name")%> <%= application.getAttribute("name")%> <br>使用EL表达式取出作用域中的值<br> ${ pageScope.name } ${ requestScope.name } ${ sessionScope

let 和 var 定义变量的区别

匿名 (未验证) 提交于 2019-12-02 23:40:02
一、变量提升 var 存在变量提升,而 let 不存在变量提升,所以用 let 定义的变量一定要在声明后再使用,否则会报错。 var //var定义的变量存在变量提升,变量会把声明提升到整个作用域的最前面 //例子1 console.log(a); //undefined var c=10; //等价于 var c; console.log(a); //undefined c=10; /*------------------------*/ //例子2 var a=100; function func(){ console.log(a); //undefined var a=10; console.log(a); // 10 } func(); //调用函数 //等价于 var a=100; function func(){ var a; console.log(a); //undefined a=10; console.log(a); // 10 } func(); //调用函数 //注意: //对于不声明而直接赋值的变量,相当于全局变量,赋值之后才可以使用,赋值之前会报错 console.log(a); //报错:a is not defined a=100; console.log(a); //100 let //let定义的变量不存在变量声明,变量在声明前使用会报错 /

作用域符号::

匿名 (未验证) 提交于 2019-12-02 23:26:52
1:作用域符号:: 前面一般是类名称,后面是该类成员,c++为避免不同类有名称相同的成员而采用作用域的方式进行区分    如:A,B表示两个类,在A,B中都有成员member。那么      A::member就表示类A中的成员member      B::member就表示类B中的成员member 2:全局作用域符号:当全局变量在局部函数中与其中某个变量重名,用::区分 3:::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。

箭头函数的作用域

老子叫甜甜 提交于 2019-12-02 23:24:18
箭头函数的作用域 箭头函数作用域是和父级的上下文绑定在一起的 测试用例: var obj = { id: 1, show: () => { console.log(this.id) } } obj.show() 输出: undefined 在此例中show函数为箭头函数,因此this绑定父级中的this,父级是一个顶级对象,在浏览器中this指向window对象,window中并没有属性id,所以输出undefined 测试用例2: var obj = { id: 1, show: function() { return () => { console.log(this.id) } } } obj.show()() 输出:1 此例中,箭头函数为一匿名函数,其父级作用域为show函数,因此箭头函数绑定show函数的作用域,show函数中this指向调用show函数的对象,即obj,obj中有id属性,且值为1,所以输出1 来源: https://www.cnblogs.com/boundless-sky/p/11767083.html

js之作用域链

匿名 (未验证) 提交于 2019-12-02 23:03:14
js采用的是词法作用域链,在代码书写阶段,作用域链就被定义了,所以 对于新手来说,要搞读懂js代码,首先就要弄清楚js的作用域链,下面看一份代码 function test ( a ){ var b = a + 2 ; var bar = function ( c ){ console . log ( a , b , c ); } bar ( b * a ); } test ( 2 ); 这个函数中 我们定义了一个test 函数,该函数中我们可以看出作用域链层层嵌套,首先是全局的,然后是test,然后是bar,在上下文执行栈中,全局执行环境会被放在栈底,而我们的test函数会第二个人入栈,然后发现里面嵌套了一个bar函数,又会将bar函数入栈 我们用一个数组来比作执行上下文栈,那么上面代码可以写成 var Esc = []; Esc . push ( gloabContext ); //首先全局上下文先压入栈底 Esc . push ( test ); //其次是test的执行上下文 Esc . push ( bar ); //最后入栈的是bar Esc . pop ( test ); //然后bar 执行完之后就弹出 变量回收,闭包变量会存在 Esc . pop ( test ); // test 弹出 Esc . pop ( gloabContext ); //

python命名空间与作用域的关系

匿名 (未验证) 提交于 2019-12-02 22:54:36
全局,内建<builtins>,如果有函数执行则有局部命名空间, 对象命名空间(包含了class类对象,实例对象,模块对象...),都有命名空间. 命名空间就是变量到对象的映射集合.通过 .__dict__ 内置属性可以看到命名空间内的键值对 例如: def test (): pass test . a = 1 #a变量(属性) 放入到函数对象的命名空间内 class SomeClass ( object ): pass s = SomeClass () s . a = 123 #a变量被放入s实例的命名空间内 作用域与命名空间的关系: 作用域查找及限制了是否可以访问到这些命名空间内的属性(变量). 简单来说,作用域是一个查找命名空间以及命名空间内属性的过程; 比如当在函数内调用print 时, 作用域找属性的过程:局部命名空间->函数命名空间->全局命名空间->builtins模块的命名空间. 如果全找不到则NameError 转载请标明出处: python命名空间与作用域的关系 文章来源: python命名空间与作用域的关系

Python学习之路26-函数装饰器和闭包

匿名 (未验证) 提交于 2019-12-02 22:54:36
《流畅的Python》笔记。 本篇将从最简单的装饰器开始,逐渐深入到闭包的概念,然后实现参数化装饰器,最后介绍标准库中常用的装饰器。 函数装饰器用于在源代码中“标记”函数,以某种方式增强函数的行为。装饰器就是函数,或者说是可调用对象,它以另一个函数为参数,最后返回一个函数,但这个返回的函数并不一定是原函数。 以下是装饰器最基本的用法: # 代码1 #装饰器用法 @decorate def target () : pass # 上述代码等价于以下代码 def target () : pass target = decorate ( target ) 即,最终的 target 函数是由 decorate(target) 返回的函数。下面这个例子说明了这一点: # 代码2 def deco ( func ) : def inner () : print ( "running inner()" ) return inner @deco def target () : print ( "running target()" ) target () print ( target ) # 结果 running inner () # 输出的是装饰器内部定义的函数的调用结果 < function deco .< locals >. inner at 0x000001AF32547D90 >