作用域

《Effective python》-第2章 函数

笑着哭i 提交于 2020-02-19 04:24:09
文章目录 15.如何在闭包里使用外围作用域中的变量 16.考虑使用生成器来改写直接返回列表的函数 17.在迭代器上面反复迭代会出错 20.用None和文档字符串来描述具有动态默认值的参数 21.用关键字参数确保代码清晰 15.如何在闭包里使用外围作用域中的变量 可参考文章: python的闭包问题 总结 :可使用nonlocal语句,改为辅助类,使用单元素列表或集合等获取外围作用域的变量。 def sort_priority ( values , group ) : # 外部作用域 """功能:把在group中的元素排在所有值的前面,若存在group范围内的值,found为True""" found = False def helper ( x ) : # 闭包 if x in group : found = True # 实际上并未修改上面的值 return ( 0 , x ) return ( 1 , x ) values . sort ( key = helper ) return found numbers = [ 8 , 3 , 1 , 2 , 5 , 4 , 7 , 6 ] group = { 2 , 3 , 5 , 7 } print ( sort_priority ( numbers , group ) ) # False print ( numbers ) #

spring之bean的作用域scope的值的详解

孤人 提交于 2020-02-18 09:11:19
今天研究了一下scope的作用域。默认是单例模式,即 scope="singleton"。另外scope还有prototype、request、session、global session作用域。scope="prototype"多例。再配置bean的作用域时,它的头文件形式如下: 如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> 这里的 scope 就是用来配置 spring bean 的作用域,它标识 bean 的作用域。 在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称 prototype), Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。当然,Spring2.0对 Bean的类型的设计进行了重构,并设计出灵活的Bean类型支持,理论上可以有无数多种类型的Bean,用户可以根据自己的需要,增加新的Bean类 型,满足实际应用需求。 1、singleton 作用域 当一个bean的 作用域设置为singleton, 那么Spring

python中的偏函数和变量作用域

China☆狼群 提交于 2020-02-18 07:37:21
1.偏函数 当一个函数有大量的参数时,调用会变得非常麻烦,我们可以通过偏函数,固定一些参数,简化函数的调用。例如, def addaddminus ( num1 , num2 , num3 , num4 ) : return num1 + num2 + num3 - num4 print ( addaddminus ( 1 , 2 , 3 , 4 ) ) 执行结果如下, 2 这个addaddminus()函数包含有四个参数,下面我们使用偏函数将参数num1和参数num2固定为1和2,并重新计算。 import functools addaddminus = functools . partial ( addaddminus , 1 , 2 ) print ( addaddminus ( 3 , 4 ) ) 执行结果如下, 2 我们也可以固定参数num2和参数num3,如下, import functools addaddminus = functools . partial ( addaddminus , num2 = 2 , num3 = 3 ) print ( addaddminus ( num1 = 1 , num4 = 4 ) ) 注意,这时我们传参时需要通过关键字传参。 执行结果如下, 2 2.变量的作用域 程序中的变量并不是在任意的位置都可以随意访问,在哪

Mybatis--生命周期作用域

戏子无情 提交于 2020-02-17 14:27:51
1.生命周期和作用域:     1.SqlSessionFactoryBuilder 创建完成 SqlSessionFactory 就可以释放了     2.SqlSessionFactory:         相当于保存数据库会话的线程池。         一旦创建就应该在程序的运行期间一致存在。          不得丢弃和创建另一个实例 。         使用单例或者静态单例创建。     3.SqlSession :           try( session=SqlSessionFactory.openSqlsession() ){             session 作用域 (花括号范围)           } 1. try 后面接括号 的方式:JDK7 定义的 用来 对IO操作进行自动释放 操作   try(sqlsession=sqlsessionfactory.opensession()){ 定义 代码,会话的范围 } 来源: https://www.cnblogs.com/chencn/p/12321499.html

JavaScript 中的函数与作用域

自闭症网瘾萝莉.ら 提交于 2020-02-17 08:53:02
一、声明提升 大部分编程语言都是先声明变量再使用,但在 JavaScript 中,有些不一样: console . log ( username ) ; // undefined var username = 'JavaScript' ; 上面的代码会正常输出 undefined 而不是报错 Uncaught ReferenceError: a is not defined 。就是因为声明提升( declaration hoisting )。 那为什么输出的是 undefined 而不是 JavaScript 呢? 因为 JavaScript 只有变量的声明会提升,初始化不会。 再看段代码: a = 2 ; var a ; console . log ( a ) ; // 2 同样是因为变量提升的原因,所以输出的是 2 而不是 undefined 。 JavaScript 引擎会在解释 JavaScript 代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来。因此,包括变量和函数(我们后面会再次提到)在内的所有声明都会在任何代码被执行前首先被处理。 JavaScript 在读到 var a = 2; 时,会将其看成两个声明: var a; 和 a = 2; 。第一个定义声明是在编译阶段进行的;第二个赋值声明会被留在原地等待执行阶段。

Python学习笔记 | 变量 + 引用 + 拷贝 + 作用域

主宰稳场 提交于 2020-02-16 03:25:36
在Python中,变量是没有类型的,在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可。但是,当用变量的时候,必须要给这个变量赋值;如果只写一个变量,而没有赋值,那么Python认为这个变量没有定义(not defined)。 一、变量和对象 1. 可变对象和不可变对象 在Python中,对象分为两种:可变对象和不可变对象,不可变对象包括int,float,long,str,tuple等,可变对象包括list,set,dict等。需要注意的是:这里说的不可变指的是值的不可变。对于不可变类型的变量,如果要更改变量,则会创建一个新值,把变量绑定到新值上,而旧值如果没有被引用就等待垃圾回收。另外,不可变的类型可以计算hash值,作为字典的key。可变类型数据对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。 $ python3Python 3.5.3 (default, Feb 27 2017, 09:17:48) [GCC 6.3.0 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> a = 'phoenix'>>> a'phoenix'>>>

Python—函数进阶

戏子无情 提交于 2020-02-15 23:53:41
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行? 来看结果: >>> def my_max(x,y): ... m = x if x>y else y ... >>> my_max(10,20) >>> print(m) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'm' is not defined 报错了!错误是“name 'm' is not defined”。变量m没有被定义。。。为啥?我明明定义了呀! 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的。 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是 当遇到函数定义的时候解释器只是象征性的将函数名读入内存 ,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。

Spring学习笔记1---Bean的作用域

情到浓时终转凉″ 提交于 2020-02-15 12:56:09
Bean的作用域 1.单例模式(Spring默认机制) < bean id = " user2 " class = " com.qi.pojo.User " c: name = " qi " c: age = " 21 " scope = " singleton " /> 2.原型模式 每一次从容器中get的时候都会产生一个新对象 < bean id = " user2 " class = " com.qi.pojo.User " c: name = " qi " c: age = " 21 " scope = " prototype " /> 3.其余的request session application,这些个只能在wbe开发中使用到 来源: CSDN 作者: 不怎么nice 链接: https://blog.csdn.net/weixin_40927436/article/details/104320338

EL表达式

て烟熏妆下的殇ゞ 提交于 2020-02-14 20:44:41
什么是EL表达式? EL全称: Expression Language ,是一种写法非常简洁的表达式,语法简单易懂,便于使用。 表达式语言的灵感来自于ECMAScript和XPath表达式语言。 EL表达式的作用 让jsp书写起来更加的方便。简化在jsp中 获取作用域数据 或者 请求数据 的写法。也会搭配 Jstl 来进行使用。 EL表达式的使用 语法结构: $(expression),提供 “.” 和“ [ ] ”两种运算符来存取数据。 a) 使用EL表达式获取请求数据   1.获取用户请求数据   2.获取请求头数据   3.获取Cookie数据 b) 使用EL表达式获取作用域数据   1.获取作用域数据   2.作用域查找顺序   3.获取指定作用域中的数据 c) 使用EL表达式进行运算   1.算术运算   2.关系运算   3.逻辑运算 d) 使用EL表达式进行空值判断 传统方式获取作用域数据:   缺点一:需要导入相关实体类   缺点二:需要强转   缺点三:获取数据的代码过于麻烦 使用EL表达式获取作用域数据:   作用:获取作用域对象中的数据。   语法格式:${表达式} 注意:   获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不理会,找到了则获取返回,找不到则什么都不做,也不报错。 

关于作用域的问题

倖福魔咒の 提交于 2020-02-14 11:39:56
ans = [ ] def helper ( node ) : ans . append ( 1 ) # ans不存在,会使用全局的ans列表,会修改上面个ans, print ( ans ) # [1] return helper ( root ) print ( ans ) # [1]我而不是[] ans = 0 def helper ( node ) : ans = 1 # 不会修改上面个ans,这里会定义为新的局部变量 print ( ans ) # 1 return helper ( root ) print ( ans ) # 0 我而不是1 来源: CSDN 作者: 三岁与十八 链接: https://blog.csdn.net/qq_27921205/article/details/104307285