作用域

Python基础教程:变量的作用域

我怕爱的太早我们不能终老 提交于 2019-11-26 19:59:50
1、变量作用域LEGB 1.1变量的作用域 在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。 1.2高级语言对数据类型的使用过程 一般的高级语言在使用变量时,都会有下面4个过程。当然在不同的语言中也会有着区别。 声明变量:让编辑器知道有这一个变量的存在 定义变量:为不同数据类型的变量分配内存空间 初始化:赋值,填充分配好的内存空间 引用:通过引用对象(变量名)来调用内存对象(内存数据) 1.3作用域的产生 就作用域而言,Python与C有着很大的区别,在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。看下面的代码: ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' #!/usr/bin/env python def func(): variable = 100 print variable print variable 代码的输出为:

作用域及作用域链

你。 提交于 2019-11-26 19:50:32
1.什么是作用域 简单的来说就是,作用域就是指变量的适用范围; 2.作用域还分全局作用域和函数作用域 全局作用域是window:全局变量,他是随处可见的,可以反复使用,但是他的缺点是,会使全局污染 函数作用域:局部变量,仅在函数内可以用,不可以反复使用 这是我们简单谈到的 3.下面我们来看变量的作用域 变量的作用域无非就是两种:全局变量和局部变量。 全局变量作用域: 这个我们相对我们应该好理解些,全局嘛,我们只要不在局部里面都可以访问到 局部作用域: 和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部, 在这需要注意的是,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! <scritpt> function fun(){ a = 100; } fun(); console.log(a);//此时的a是等于100 </script> 为什么呢? 这就是不用var关键字的后果,虽然你是想声明一个局部变量的但是你没有使用var关键字,所以导致这个a变成了全局变量(这是我简单写的一个变量名a,一般我们在写代码时,要规范化) 我们重点来看一下局部的 <scritpt> var a = 200; function fun(){ console.log(b);//undefined var b=

MVC、MVP及MVVM之间的关系

半世苍凉 提交于 2019-11-26 19:49:31
1.网页的!DOCTYPE声明及对网页起何作用 DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本。 其中的DTD(例如上例中的xhtml1-transitional.dtd)叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的DTD来解释你页面的标识,并展现出来。 要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效。 1)<!Doctype>声明位于文档中的最前面,处于<html>标签之前。告知浏览器的解析器,用什么文档类型规范来解析这个文档。 2)严格模式的排版和js运作模式是以该浏览器支持的最高标准运行。 3)在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。 4)DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。 ---------------------    2.Webpack底层原理及脚手架工具分析 webpack出现的原因 模块的加载和传输过程中,若每个模块都请求一个,这样会由于请求次数过多,导致启动速度过慢。若是把所有模块打包成一个文件只请求一次,会导致文件太大,每次请求都会消耗很大的流量。最好的方式是把代码块按块区分,按需进行懒加载

Thymeleaf中获取作用域中的数据

半世苍凉 提交于 2019-11-26 19:45:06
Thymeleaf中去的作用域中数据的方法和jsp相似,熟悉jsp的开发者很容易学会 先看一个demo,Model,request,session,ServletContext中的数据 public String One(Model model, HttpServletRequest request, HttpSession session){ Person p1=queryPerson.query(1001); model.addAttribute("Tom",p1); model.addAttribute("req","hello"); request.setAttribute("req","Hello"); session.setAttribute("ses","Http!"); request.getServletContext().setAttribute("app","App"); return "Tom"; } model中的数据实际上就是request中的数据,以下写法都可以拿到数据 <h1 th:utext="${Tom.gender}">Hello</h1> <h1 th:utext="${req}">Hello</h1> <h1 th:utext="${#request.getAttribute('req')}"></h1> <h1 th:utext="${

Eclipse快捷键大全

可紊 提交于 2019-11-26 19:38:48
Eclipse快捷键大全 转自 https://www.cnblogs.com/springl/p/8709260.html Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在当前行插入空行(原理同上条) Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) Ctrl+M 最大化当前的Edit或View (再按则反之) Ctrl+/ 注释当前行,再按则取消注释 Ctrl+O 快速显示 OutLine Ctrl+T 快速显示当前类的继承结构 Ctrl+W 关闭当前Editer Ctrl+K 参照选中的Word快速定位到下一个 Ctrl+E 快速显示当前Editer的下拉列表

js中关于作用域(函数声明的提升)的解析:

荒凉一梦 提交于 2019-11-26 19:31:06
用函数名定义的函数,会整体提升到当前作用域的顶端,所以在函数定义前后都可以调用。 用函数表达式定义的函数,var fn;会提升,函数体不会提升,所以在函数之前调用fn();会报错。 fn();//我是fn function fn(){ alert(‘我是fn’); } fn();//我是fn fn();//报错,因为fn的函数体并没有被提升,此时只是var fn;被提升了 console.log(fn); //undefined var fn = function() { alert(‘我是fn’); } fn();//我是fn var a = 5; a = function(){ alert(‘哈哈’); } a();//哈哈 解析:首先给a赋值为5,然后给a赋了一个函数,调用这个函数,结果是哈哈。 var a = 5; function a() { alert(‘哈哈’); } console.log(a);//5 a(); //报错 a is not a function 解析:var a; function a() {alert(‘哈哈’);} 都提升到了当前作用域的顶端,也就是说刚开始a是声明了未赋值,接着给a赋了一个函数,然后接着看没有被提升的代码,a=5; 5覆盖掉了函数,此时a=5;所以打印出来的是5,去调用a();就是调用5();所以报错。 var a = 5;

关于作用域和作用域链的总结

拜拜、爱过 提交于 2019-11-26 19:17:38
今天听了一个同事(到现在了,还不知道人家的名字,怪不好意思的。。。捂脸。。不准笑我)的分享会,主要讲的就是作用域和作用域链,感觉受益匪浅。与我自己的理解相结合,感觉对这两个哥们了解的更多了。把我的心得总结如下,看不懂的别问我,因为我也不懂。看得懂的请感谢我和我的同事,因为下面的东西我们两个经验的总结。当然了主要还是感谢我这位同事,毕竟我是在他高大的肩膀上站了一会才有的下面的体会。好了书归正传,咱们拉回来说正事。 在说正事之前先介绍几个关键字: var , let , const , function var: 很久以前的东西了,反正是很久以前就有它了。不过我肯定比他大。那么他是干啥的嫩。定义变量,而且能作变量提升,所谓的变量提升就是。还是看代码吧。 console.log(a) //undefined Var a=1 结果是 undefined ,没有报错,因为程序在执行前,只要是本作用域下用 var 声明的变量都会做个提升声明,但不会赋值。 Let :也是声明变量的,这个我知道,是 es6 新出炉的一个关键字。先让我骄傲一下。哈哈哈哈。那么他能不能做变量提升呢?答案是不能的,要是和 var 一样的话就不会再弄个 let 了。还有就是他有块作用域了,而 var 是函数作用域。还是看代码 console.log ( a ) // 报错 Let a=1 这次的输出结果是报错

Eclipse快捷键

丶灬走出姿态 提交于 2019-11-26 19:13:14
Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 2. 【Ctrl+O】 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。 3. 【Ctrl+/】 快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不需要每行进行重复的注释。 4. 【Ctrl+D】 删除当前行,这也是笔者的最爱之一,不用为删除一行而按那么多次的删除键。 5. 【Ctrl+M】 窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时),现在好了,试试【Ctrl+M】快捷键。 查看和定位快捷键 在程序中,迅速定位代码的位置,快速找到Bug的所在,是非常不容易的事,Eclipse提供了强大的查找功能,可以利用如下的快捷键帮助完成查找定位的工作。 1. 【Ctrl+K】、【Ctrl++Shift+K】 快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了。 2. 【Ctrl+Shift+T】 查找工作空间(Workspace

可变长参数、函数对象、嵌套、名称空间和作用域

我的未来我决定 提交于 2019-11-26 17:55:01
目录 可变长参数、函数对象、嵌套、名称空间和作用域 一、可变长参数 1.1 可变长形参之* 1.2 可变长实参之* 1.3 可变长形参之** 1.4 可变长实参之** 二、函数对象 2.1、引用 2.2、当做实参参数传给一个形参参数 2.3、可以作为容器类数据类型中的元素 2.4 可以当做函数的返回值 三、函数的嵌套 3.1 函数的嵌套定义 3.2 函数的嵌套调用 四、名称空间和作用域 4.1 名称空间 4.1.1 内置名称空间 4.1.2 全局名称空间 4.1.3 局部名称空间 4.1.4 三种名称空间执行顺序 4.1.5 三种名称空间查找顺序 4.2 作用域 4.2.1 全局作用域 4.2.2 局部作用域 4.2.3 注意点 4.2.4 函数对象和作用域应用 4.3 补充知识点 4.3.1 global关键字 4.3.2 nonlocal关键字 4.3.3 注意点 来了,来了,它真的来了,超级台风利奇马已经来了,晚上正吃着可口的晚餐,吃完到外面风雨交加,整个人都凌乱了,不吐槽了,还是好好学习吧! 可变长参数、函数对象、嵌套、名称空间和作用域 一、可变长参数 1.1 可变长形参之* 用*接收溢出的位置实参,以元组的形式存储,然后复制给*后的参数,*后参数名固定为args def sum_self(*args): # 用*接收位置实参1,2,3,4,存储为元组(1,2,3,4)

DAY12

≯℡__Kan透↙ 提交于 2019-11-26 17:45:44
DAY12 可变长参数 可变长参数:指的是在调用函数时,传入的参数个数可以不固定 调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接收溢出的位置实参(*)与关键字实参(**) 一、可变长形参之* 形参中的 会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给 后的参数。需要注意的是:*后的参数名约定俗成为args。 二、可变长实参之* 实参中的 , 会将 后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带 的,它就是位置实参,应该马上打散成位置实参去看。 三、可变长形参之* 形参中的 会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给 后的参数。需要注意的是:**后的参数名约定俗成为kwargs。 四、可变长实参之** 实参中的 , 会将 后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带 的,它就是关键字实参,应该马上打散成关键字实参去看。 五、可变长参数应用 def index(name, age, sex): print(f"name: {name}, age: {age}, sex: {sex}") def wrapper(*args, **kwargs): print(f"args: {args}") print(f"kwargs: {kwargs}") index(