作用域

【python基础】命名空间

隐身守侯 提交于 2019-12-28 00:04:35
一、命名空间的定义   变量名和变量值的映射   命名空间是用字典实现, key就是变量的名,value就是变量值 二、命名空间的分类   python程序执行的过程中, 同时会有2-3个活动的命名空间(函数调用时,有3个命名空间, 函数调用结束后,有两个命名空间)   根据变量的位置, 将命名空间分为三类:     局部命名空间:Local, 指的是函数所拥有的命名空间, 包括函数的入参,函数内部的局部变量     全局命名空间:Global, 指的是模块(.py文件)所拥有的命名空间, 包括函数, 类, 全局的变量,导入模块中的内容     内建命名空间:Build-in, 指的是python内置的函数和异常.     同一个命名空间中,变量名不能重复; 不同的命名空间之间,变量名互不影响 三、命名空间的生命周期   局部命名空间:函数调用的时候创建, 函数调用结束后被删除   全局命名空间:模块被加载的时候创建, python解释器退出的时候被删除   内建命名空间:随着python解释器的启动而创建, python解释器退出的时候被删除 四、命名空间的访问   locals() 用这个函数可以访问到局部的命名空间   globals() 用这个函数可以访问到全局的命名空间   标准的情况是:     在局部中, 使用locals()     在全局中, 使用globals(

JS的变量与函数

风流意气都作罢 提交于 2019-12-27 21:22:27
/*温馨提示:若觉得黑白的反差“亮瞎眼”,可适当调低屏幕亮度~*/   1.变量与函数的定义     变量:var a; //定义变量a        var a = 123; //定义变量a,并且赋值为123        js中的变量是若类型的,变量占用固定内存空间,因此是直接量     函数:function fn (传参){函数体} //声明函数fn(“定义式函数”,即函数声明)        var a = function(传参){函数体} ; //先定义变量a与一个匿名函数,并将匿名函数赋值给变量a(赋值式,即函数表达式)   2.定义的作用     变量的定义指明了变量的作用域     函数的定义指明了函数的作用域,同时定义了函数体结构   3.预解析      在页面加载的时候,浏览器加载JS文件并扫描代码,此过程中,函数声明与变量定义会被预处理,即提升至其作用域顶部先进行声明,对于函数,声明了函数名与函数体,对于变量声明了变量名, 并不赋值 。因此,定义式函数可在其函数代码前被调用,而函数表达式不行,变量在这种情况下为undefined。      这种预解析也称函数声明提升与变量提升,此时后定义的变量无法覆盖同名函数的定义。   4.作用域      上面介绍了函数声明与变量声明都指明了作用域,JS的作用域按函数来划分,在JS中没有所谓的块作用域,即for

Lesson 022 —— python 函数

亡梦爱人 提交于 2019-12-27 12:24:47
Lesson 022 —— python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 语法 Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表): 函数体 默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。 # 计算面积函数 def area(width, height): return width * height def print_welcome(name): print("Welcome", name) print_welcome("Runoob") w = 4 h = 5 print("width =", w, " height =", h,

Python之函数

落花浮王杯 提交于 2019-12-27 12:21:50
  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。   函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数   你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 语法 Python 定义函数使用 def 关键字,一般格式如下 def 函数名(参数列表): 函数体 View Code 默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。 实例 让我们使用函数来输出"Hello World!": >>> def hello() : print("Hello World!") >>> hello() Hello World! >>> View Code 更复杂点的应用,函数中带上参数变量: #!/usr/bin/python3 # 计算面积函数 def area(width, height

python总结(更新中)

◇◆丶佛笑我妖孽 提交于 2019-12-27 12:21:27
1 python函数中的参数传递(注意可变和不可变传递) 可更改(mutable)与不可更改(immutable)对象 在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。 不可变类型: 变量赋值 a=5 后再赋值 a=10 ,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。 可变类型: 变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。 python 函数的参数传递: 不可变类型: 类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型: 类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 2 变量作用域: 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。 变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4中,分别是: L

第4章 变量、作用域和内存---JS红宝书书摘系列笔记

房东的猫 提交于 2019-12-27 10:16:59
一、基本类型和引用类型 ECMAScipt变量可能分为两种数据类型:基本类型和引用类型。 基本类型:指简单的数据段;包括Undefined、Null、Boolean、Number、String;可以操作保存在变量中值(栈内存),所以称为按值访问;不能添加属性。 引用类型:可能由多个值构成的对象;包括Arry、Object等;js不允许直接操作对象的内存(堆内存)空间,所以成为按引用访问;可以动态得添加/改变/删除引用类型值的属性和方法。 1.复制 1 var a=5; 2 var b=a; 3 console.log(a);//5 4 console.log(b);//5 5 a=3; 6 console.log(a);//3 7 console.log(b);//5 8 var arrA=[1,2,3]; 9 var arrB=arrA; 10 console.log(arrA);//[1,2,3] 11 console.log(arrB);//[1,2,3] 12 arrA[0]='x'; 13 console.log(arrA);//['x',2,3] 14 console.log(arrB);//['x',2,3] 上述代码中a、b为基本数据类型,arrA、arrB为引用类型。可以看出首先定义并初始化了变量a为5,再定义变量b,此时打印出来a和b都是5;改变a的值为3

函数、迭代器、生成器、装饰器

被刻印的时光 ゝ 提交于 2019-12-27 09:53:23
函数 函数基础 一、为什么要使用函数 把重复的代码提取出来,节省代码量 二、函数分类 内置函数,如len(),sun() 自定义函数 三、如何定义函数 def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值 四、函数使用的原则:先定义,后使用 五、调用函数 1、如何调用函数:函数名加括号 2、函数的返回值 函数的返回值通常都是一个,如果出现 return a,b 这种情况,其实是表示一个元组 六、函数的参数 #1、位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值,顺序必须一一对应 #2、关键字参数:按照key=value的形式定义的实参 无需按照位置为形参传值 注意的问题: 1. 关键字实参必须在位置实参右面 2. 对同一个形参不能重复传值 #3、默认参数:形参在定义时就已经为其赋值 可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参) 注意的问题: 1. 只在定义时赋值一次 2. 默认参数的定义应该在位置形参右面 3. 默认参数通常应该定义成不可变类型,举例 def add_end(L=[]): print(id(L)) L.append('END') return L print(add_end()) print(add_end()) 结果:

function类型

戏子无情 提交于 2019-12-27 09:14:51
一. 函数的声明方式 1.普通的函数声明 function box(num1, num2) { return num1+ num2; } 2.使用变量初始化函数 var box= function(num1, num2) { return num1 + num2; }; 3.使用 Function 构造函数 var box= new Function('num1', 'num2' ,'return num1 + num2'); PS:第三种方式我们不推荐,因为这种语法会导致解析两次代码(第一次解析常规 ECMAScript 代码,第二次是解析传入构造函数中的字符串),从而影响性能。但我们可以通 过这种语法来理解"函数是对象,函数名是指针"的概念。 二.作为值的函数 ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不 仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数 的结果返回。 function box(sumFunction, num) { return sumFunction(num); //someFunction } function sum(num) { return num + 10; } var result = box(sum, 10); //传递函数到另一个函数里 三. 函数内部属性 在函数内部

Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

房东的猫 提交于 2019-12-27 05:32:08
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例? 一.背景介绍 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的核心是控制反转(IoC)和面向切面(AOP)。 二.知识剖析 什么是反转控制(IOC)? 是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“ 第三方”实现具有依赖关系的对象之间的解耦。 通过控制反转客户端不需要再主动创建对象,只需要通过IOC,由IOC去创建就可以了 由应用程序创建对象转变为由IOC容器来创建,用于控制创建对象的主体发生了改变,这是控制反转 应用程序需要的对象信息由IOC容器创建后注入,也就是说依赖于容器来注入,这是依赖注入 表达的是一个东西,只是描述的角度不同。 IOC,从容器的角度出发,容器反向控制应用程序对象的创建。 DI,从应用程序的角度出发,应用程序需要依赖容器注入对象。 三

预解析

守給你的承諾、 提交于 2019-12-27 04:32:14
1.变量提升,把变量的声明提升到当前作用域的最上面,不包括变量的赋值; 2.函数提升,把函数的声明提升到当前作用域的最上面,不包括函数的调用; 3.在预解析的过程中,如果函数和变量的名字相同,此时函数优先 来源: CSDN 作者: 我不很酷 链接: https://blog.csdn.net/weixin_44345448/article/details/103713489