作用域

Python函数补充

故事扮演 提交于 2020-02-10 16:55:59
Python函数补充 函数的嵌套调用 实例: 作用域 作用域指的是变量生效的区域,在Python中一共有两种作用域: 1、全局作用域: 全局作用域在程序执行时创建,在程序执行结束时销毁 所有函数以外的区域都是全局作用域 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问 2.函数作用域 函数作用域在函数调用时创建,在调用结束时销毁 函数每调用一次就会产生一个新的函数作用域 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问 变量的查找 当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用, 如果没有则继续去上一级作用域中寻找,如果有则使用, 如果依然没有则继续去上一级作用域中寻找,以此类推 直到找到全局作用域,依然没有找到,则会抛出异常 NameError: name ‘a’ is not defined 实例: 递归函数: 一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 练习 1、创建一个函数 power 来为任意数字做幂运算 n ** i 2.创建一个函数,用来检查一个任意的字符串是否是回文字符串,如果是返回True,否则返回False。 (回文字符串,字符串从前往后念和从后往前念是一样的) 匿名函数: 匿名函数就是没有名称的函数

python命名空间与作用域

寵の児 提交于 2020-02-10 02:03:33
命名空间是名称与对象之间的关系,可以将命名空间看做是字典,其中的键是名称,值是对象。 命名空间不共享名称。 在命名空间中的名称能将任何python对象作为值,在不同的命名空间中相同的名称可以与不同的对象相关联。但是,如果存在名称解析协议,则多个命名空间可以一起工作来解析名称。也就是说,如果有多个命名空间(总是有的),那么可以定义搜索的顺序,依次在不同的命名空间里来查找某个名称(或确认其不存在于任何认可的命名空间)。在python中,将这一过程定义为作用域。 作用域搜索规则:LEGB L:局部的(local) E:封闭的(Enclosing) G:全局的(Global) B:内置的(Built-in) 一、局部命名空间 函数内部的命名空间,在调用函数的时候生成,调用结束时消失。当局部命名空间有效时,它是第一个用于检查某个名字存在性的命名空间。如果在局部命名空间内找到该名称,则返回与名字相关联的对象,反之提示出错。 二、全局命名空间 python在模块中维护命名空间,模块是一些python文件--包含函数等对象,并且可以导入其他程序使用。当某个模块被导入之后,该模块同时引入了一个命名空间,其中包含模块中所有的名称和关联的对象,可以通过存储在没个模块中的__dict__来查看这个命名空间,换句话说,字典就是这个模块的命名空间。 如果想要引用给模块中的对象,要使用点符号将名称和模块名称关联

Spring IoC 容器和 bean 对象

和自甴很熟 提交于 2020-02-09 19:04:20
程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关 系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立 性)。 I o C容器 IoC 是 Inversion of Control 的缩写,即控制反转的意思,是解决程序耦合性的一种思想。通常创建对象的时候使用new关键字,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。解决程序耦合性的办法有很多,而依赖注入(DI)这一功能就是IOC思想的一种具体实现 Spring pom.xml配置: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.0.RELEASE</version> </dependency> </dependencies> Spring 项目结构依赖: Spring bean.xml的配置: <?xml version="1.0" encoding="UTF-8"?>

016.Python闭包函数以及locals和globals

我们两清 提交于 2020-02-09 09:27:29
一 闭包函数 内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,这个内函数叫做闭包函数 1.1 闭包函数语法 def outer(): a = 5 def inner(): print(a) return inner 对比正常的局部变量 局部变量的生命周期最短,在调用结束之后,立即释放. def func(): a = 5 print(a) func() print(a) 执行 1.2 闭包函数的定义 def bibao(): people = "孙仲谋" def caocao_say(): print("生子当如%s" % (people)) return caocao_say func = bibao() # func = caocao_say func() 执行 [root@node10 python]# python3 test.py 生子当如孙仲谋 1.3 闭包函数的特点(升级) 内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期(实际内存给它存储了这个值,暂时不释放) 示例 def grade(str1): def func_in(str2): print(str1+str2) return func_in a=grade('小李:') a('语文:118') b=grade('小红:') b('语文:109')

c++ primer 5th 笔记:第二章

感情迁移 提交于 2020-02-09 08:20:09
第二章:变量和基本类型   笔记:     1. c++语言规定一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。其中,数据类型long long是在c++11中新定义的。     2. 执行浮点运算选用double,这是因为float通常精度不够而且双精度浮点和单精度浮点数的计算代价相差无几。     3. 切勿混用带符号类型和无符号类型。其中,带符号数会自动地转换成无符号数。     4. 转义序列 以反斜线作为开始,如\n、\t、\"、\'。也可以使用泛化的转义序列,如\7(响铃)、\12(换行符)、\x4d(字符M)。形式是\x后紧跟1个或多个十六进制数字,或者\后紧跟1个、2个或3个八进制数字。参考 ASCII 码。     5. 指定字面值的类型,如L'a'(类型是wchar_t)、 u8"hi!" (utf-8字符串字面值)、1E-3F(单精度浮点型字面值,类型是float)。     6. c++语言中,初始化和赋值时两个完全不同的操作 。     7. c++11新标准中,用 花括号 来初始化变量得到了全面应用,被称为 列表初始化 (list initialization)。这种初始化有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。如:     long

JS this用法详解

孤街醉人 提交于 2020-02-09 07:15:51
随着对 js 的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象、闭包、原型链继承等等    1、this是啥?   简言之,this是 JavaScript语言 中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却让很多人张二摸不着头脑。这里我们留个小悬念,希望看完这篇文章了你能回答出来this到底指引个甚。    2、this有啥用?   那边观众又该为了,既然this这么难以理解,那么为个甚还要用它呢?我们来看个例子: function identify() { return this .name.toUpperCase(); } function sayHello() { var greeting = "Hello, I'm " + identify.call( this ); console.log( greeting ); } var person1= { name: "Kyle" }; var person2= { name: "Reader" }; identify.call( person1); // KYLE identify.call( person2); // READER sayHello.call( person1); // Hello, I'm KYLE sayHello.call(

js 函数讲解

这一生的挚爱 提交于 2020-02-09 07:15:32
函数 来自 《JavaScript 标准参考教程(alpha)》 ,by 阮一峰 目录 概述 函数的声明 函数的重复声明 圆括号运算符,return 语句和递归 第一等公民 函数名的提升 不能在条件语句中声明函数 函数的属性和方法 name 属性 length 属性 toString() 函数作用域 定义 函数内部的变量提升 函数本身的作用域 参数 概述 参数的省略 传递方式 同名参数 arguments 对象 函数的其他知识点 闭包 立即调用的函数表达式(IIFE) eval 命令 参考链接 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 概述 函数的声明 JavaScript 有三种声明函数的方法。 (1)function 命令 function 命令声明的代码区块,就是一个函数。 function 命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 function print(s) { console.log(s); } 上面的代码命名了一个 print 函数,以后使用 print() 这种形式,就可以调用相应的代码。这叫做函数的声明(Function Declaration)。 (2)函数表达式 除了用 function 命令声明函数,还可以采用变量赋值的写法。 var print =

javaScript变量作用域(scope)

两盒软妹~` 提交于 2020-02-09 02:17:15
一个变量的作用域(scope)是程序源代码中定义这个变量的区域。 全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。 然而在函数内声明的变量只在函数体内有定义,它们是局部变量,作用域是局部性的。 函数参数也是局部变量,它们只在函数体内有定义。 在函数体内,局部变量优先级高于同名的全局变量。 如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。 var scope = "global" //声明一个全局变量 function checkscope(){   var scope ="local" //声明一个同名的局部变量   return scope  //返回局部变量的值,而不是全局变量的值 } checkscope(); // =>"local" 尽管在全局作用域编写代码时可以不写var语句,单声明局部变量时则必须使用var语句。 来源: https://www.cnblogs.com/luokai/p/6085062.html

javascript -- 变量

大兔子大兔子 提交于 2020-02-09 02:13:47
工作中发觉原生 js 还有待加强,只好再啃一遍高程3了。 ECMAScript的变量是松散类型的,所谓松散类型就是(变量)可以用来保存任意类型的数据。换句话说每个变量仅仅是在特定的时间内保存值的占位符而已。 所谓特定的时间就是变量的生命周期。 关于生命周期就要说到‘作用域’,进而得说‘作用域链’。此处只做简单介绍,后面会详细介绍作用域和作用域链。 js中没有块状作用域( if语句 ),只有全局作用域和函数作用域。 (var定义的变量将称为该作用域中的局部变量 即全局下就是全局变量,函数内就是局部变量) 全局作用域:在全局下有效(全局定义或函数内未定义只赋值的变量),即window下都可以使用。 函数作用域:只在函数体内有效,函数运行完函数、变量立即销毁,这也是无法在外面引用函数内的变量的原因。 定义: var message; var user;  或者  var message, user; 定义了名为message user的变量,可以用来保存任何值。未初始化的会保存一个undefined console.log(message);// undefined 函数退出后,变量销毁. function test(){ var msg='hi'; // 局部变量 } test(); console.log(msg);// 错误 函数体内未定义只赋值的变量是全局变量: function

JavaScript变量作用域

好久不见. 提交于 2020-02-09 02:13:14
JavaScript变量作用域 未用 var 声明的变量是全局变量,是 window 对象的属性 使用 var 声明的变量是有作用域的: 在函数体内部声明,则作用域为整个函数体 for 循环语句块中无法定义属于它的局部作用域的变量,因为作用域是以 函数 为基本分隔单位。 如果两个独立的函数各自声明了同名变量,则各自独立,互不干扰 嵌套函数中,内部函数可以访问外部函数的变量,反之外部函数不能访问内部函数的变量 嵌套函数中,如果内部函数和外部函数变量重名,则在内部函数中,内部函数的变量将覆盖外部函数的变量;而外部函数访问到的依然是外部函数的变量 上面一条说明了:JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。 JavaScript会扫描整个函数体,把所有声明的变量“提升”到函数顶部;但是,并不会“提升”变量的初始化赋值 变量空间的污染 全局变量会绑定到 window 对象上,不同的JavaScript文件如果使用了相同的全局变量,或定义了相同的全局函数,则会造成命名冲突。 一个方法是把自己所有的变量和函数全部绑定到一个全局变量中。[推荐] 另外一个方法是增加自己独特的变量命名前缀/后缀 来源: https://www.cnblogs.com/weaming/p/5160817.html