作用域

python文章装饰器理解12步

感情迁移 提交于 2020-01-18 10:36:01
1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: a_string = "This is a global variable" def foo(): print locals() print globals() # doctest: +ELLIPSIS {, 'a_string': 'This is a global variable'} foo() # 2 {} 内置的函数globals返回一个包含所有python解释器知道的变量名称的字典(为了干净和洗的白白的,我省略了python自行创建的一些变量)。在#2我调用了函数 foo 把函数内部本地作用域里面的内容打印出来。我们能够看到,函数foo有自己独立的命名空间,虽然暂时命名空间里面什么都还没有。 3.

python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)

谁说我不能喝 提交于 2020-01-18 10:34:32
转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: 1 a_string = "This is a global variable" 2 def foo(): 3 print

Python作用域-->闭包函数-->装饰器

独自空忆成欢 提交于 2020-01-18 10:33:46
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域。  全局作用域是定义在文件级别的变量,函数名。而局部作用域,则是定义函数内部。  关于作用域,我要理解两点:a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改)  下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1   如果局部没有定义变量x,那么函数内部会从内往外开始查找x,如果没有找到,就会报错 x = 1 def funx(): print(x) # 打印出1 funx() print(x) # 打印出1 x = 1 def funx(): def func1(): print(x) # 打印出1 func1() funx() print(x) # 打印出1  因此,关于作用域的问题,只需要记住两点就行:全局变量能够被文件任何地方引用,但修改只能在全局进行操作;如果局部没有找到所需的变量,就会往外进行查找,没有找到就会报错。 2.关于高级函数 我们知道,函数名其实就是指向一段内存空间的地址,既然是地址,那么我们可以利用这种特性来。  2.1函数名可以作为一个值 def delete(ps): import os filename =

C++ 名字空间namespace的使用

你。 提交于 2020-01-18 08:42:40
A namespace is a scope. C++ provides namespaces to prevent name conflicts. A namespace is a mechanism for expressing logical grouping. That is, if some declarations logically belong together to some criteria(准则), they can be put in a common namespace to express that fact. That is, the namespace is the mechanism(机制) for supporting module programming paradigm(范型). C++名字空间是一种描述逻辑分组的机制。也就是说,如果有一些声明按照某种准则在逻辑上属于同一个模块,就可以将它们放在同一个名字空间,以表明这个事实。名字空间对于模块化的程序设计有重要作用。 例如: // x.h namespace MyNamespace1 { int i; void func(); class CHello { public: void print(); } }; // y.h namespace MyNamespace2 { class

using命名空间

杀马特。学长 韩版系。学妹 提交于 2020-01-18 08:42:05
命名空间 转自:https://blog.csdn.net/touzani/article/details/1637776 仅为方便查看,侵删: 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。 MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名空间。 1 )作用域与命名空间 相关概念 与命名空间相关的概念有: 声明域(declaration region)—— 声明标识符的区域。如在函数外面声明的全局变量,它的声明域为声明所在的文件。在函数内声明的局部变量,它的声明域为声明所在的代码块(例如整个函数体或整个复合语句)。 潜在作用域(potential scope)—— 从声明点开始,到声明域的末尾的区域。因为C++采用的是先声明后使用的原则,所以在声明点之前的声明域中,标识符是不能用的。即,标识符的潜在作用域,一般会小于其声明域。 作用域(scope)—— 标识符对程序可见的范围。标识符在其潜在作用域内,并非在任何地方都是可见的。例如,局部变量可以屏蔽全局变量、嵌套层次中的内层变量可以屏蔽外层变量

js作用域的理解

本小妞迷上赌 提交于 2020-01-18 03:29:27
script:自上而下 全局变量、全局函数 函数:由里到外 浏览器:    “JS解析器”      1)“找一些东西”: var function       参数 a = undefine 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义       fn1 = function fn1 (){ alert (2); } 所有的函数,在正式运行代码之前,都是整个函数块       JS 的预解析原则: 遇到重名的:只留一个!变量和函数重名了,就只留下函数      2)逐行解读代码: 表达式( = + - * / % ++ -- ! )可以修改预解析的值! 注意:函数块不要放在 if/ else、 for的 {}里面执行; 函数如果带参数,预编译 先找 参数的声明 并且把 实参赋值给形参,再执行找函数的操作 代码解析至少分两步 1)预解析:查找var,function参数例如下面这个例子 a= 未定义 fn1={alert(2)}函数的话,是整个整体 2):逐行读代码:类似=+-%*等都是表达式,表达式可以改变值 example1: <script> alert(a) //最终结果:undefiner var a=1 function fn1(){ alert(alert(2)); } </script> 分析:   预解析: a=未定义;fn1=function

js知识点小结

你。 提交于 2020-01-18 03:16:54
文章目录 1、原始值和引用值类型及区别 2、判断数据类型typeof、instanceof、Object.prototype.toString.call()、constructor 3、类数组与数组的区别与转换 4、 数组的常见API 5、bind、call、apply的区别 6、new的原理 7、如何正确判断this(区别箭头函数) 8、严格模式与非严格模式的区别 9、原型和原型链 10、prototype与__proto__的关系与区别 11、继承的实现方式及比较 12、作用域和作用域链、执行上下文 13、闭包及其作用 14、深拷贝与浅拷贝 15、防抖和节流 16、Js事件绑定时,函数名加括号和不加括号区别 17、DOM常见的操作方式 18、 Array.sort()方法与实现机制 19、 Ajax的请求过程 20、JS的垃圾回收机制 21、JS中的String、Array和Math方法 22、addEventListener(DOM2级事件处理程序)和onClick()(DOM0级事件处理程序)的区别 23、立即执行函数 24、整个HTML解析过程与JS脚本解析和执行顺序 25、new和Object.create的区别 26、DOM的location对象 27、浏览器从输入URL到页面渲染的整个流程 28、跨域、同源策略及跨域实现方式和原理 29、浏览器的回流(Reflow

JS作用域,浏览器解析原理

家住魔仙堡 提交于 2020-01-18 03:16:53
---恢复内容开始--- 浏览器: JS解析器:这儿理解为两步 1)JS的预解析:“找一些东西”:var function 参数; (1)所有的变量,在正式运行代码之前,都提前赋一个值:未定义 a=undefined; (2)所有的函数,在正式运行代码之前,都是整个函数块 fn1=function fn1(){alert(2);} 2)逐行解读代码(在第一步形成的仓库的基础上解读) 表达式:= + - * / % !++ -- ...... 逐行读到表达式的时候会改变与预解析中变量的值 注:JS的预解析中遇到重名的:只留一个,当函数名和变量名相同时,就只留下函数 作用域: 域:空间、范围、区域...... 作用:读、写 域: (1)script:全局变量,全局函数; 多个script之间:自上而下,将上一个变量读到仓库,执行完后 再进行到下一个script,上一个script中的变量值仍存在仓库中 (2)函数 由里到外(局部到全局找变量值) 作用域链:由里到外,由局部到全局 11 ---恢复内容结束--- 来源: https://www.cnblogs.com/fengxiaopiaoer/p/5621424.html

JavaScript基础学习--08 JS作用域

微笑、不失礼 提交于 2020-01-18 02:51:42
Demos: https://github.com/jiangheyan/JavaScriptBase 一、浏览器 1、“JS解析器”(至少分为两步骤) 1.1 JS预解析(代码正式运行之前的准备工作) “找一些东西并形成一个 仓库 ”:var、function、参数 1.1.1 var a = 1; 找到var a = undefined (所有的变量在正式运行代码之前,都提前赋值:未定义;--》undefined) 1.1.2 function fn(){ alert(......); } 找到fn = function fn(){ alert(......); } (所有的函数在正式运行之前都是整个函数块) 1.1.3 预解析规则 : 1.1.3.1 遇到 重名 的: 只留一个 ------变量和函数重名,选择留下函数;同等级的留下后面那个(两个变量重名留后者;两个函数重名留后者) 1.1.3.2 表达式可以修改仓库中的值 1.1.3.2.1 表达式:+-*/ Number()...... 注意:函数只是一个声明,不是表达式 1.2 逐行解读代码 1 alert(a); // function a(){alert(4);} 2 var a = 1; // 表达式能改变仓库中(预解析仓库)的值---> a = 1 3 alert(a); // 1 4 5 function a(

JS的作用域概念

廉价感情. 提交于 2020-01-18 02:08:14
作用域:什么样的空间去读和写 域:空间、范围、区域。。。  <script> 全局变量 全局函数 一个<script>就是一个域 作用:读、写 <script> alert(a); //结果是Undefined var a=1 </script> 为什么? <script> alert(a); //直接报错 a=1 </script> 为什么? 浏览器内部专门读取JS文件的程序:“JS解析器” 作用域="JS解析器"的工作方式 <script> alert(a); var a=1; function fn1(){ alert(2); } </script> 至少有两步: 1) "找一些东西": var function 参数; 上面那个代码预编译(预解析) :找到 var function;         var a=undefined (可以理解为没有逐行运行代码之前的所有的var都是提前赋值未定义,偷懒的机制)         fn1=funciton fn1(){alert(2)} (所有的函数,在正式运行代码之前,都是整个函数块)         把找到的var fn1放入一个仓库里 2)逐行解读代码:   表达式 (= + - * % / ++ --! 参数...):能够做一些改变的东西         上面代码 alert(a) 在仓库里面找到 var a