作用域

mysql 变量

帅比萌擦擦* 提交于 2019-11-27 01:09:17
用户变量 1、用户变量,用户变量和数据库连接有关,连接后声明变量,连接断开后,自动消失。 2、用户变量以@开头,select一个没有赋值的用户变量,返回NULL,也就是没有值,注意取值为NULL与取值为0或者""的区别。 mysql> select @var; +------+ | @var | +------+ | NULL | +------+ 3、用户变量赋值有三种方式:    a、set @var=(select user from user limit 0,1);    b、select user into @var from user limit 0,1;    c、select @var:=user from user limit 0,1;   注意:a和bc的区别,比如当前@var取值为123,查询出来的记录为空,执行a,@var取值为NULL,而执行bc,取值还是123 4、需要注意的是,mysql的变量类似于动态语言,在赋值的时候,确定变量类型。也就是说,int、string都可以赋值给同一个变量。如下: mysql> set @a=123; Query OK, 0 rows affected (0.00 sec) mysql> select @a; +------+ | @a | +------+ | 123 | +------+ 1 row in set

Java中的内存

房东的猫 提交于 2019-11-27 00:26:11
Java的内存需要划分为5个部分 1. 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中。 局部变量:方法的参数,或者是方法{ }内部的变量。 作用域:一旦超出作用域,立即从栈内存当中消失。 2. 堆(Heap):凡是new出来的东西,都在堆内存当中 堆内存里面的东西都有一个地址值:16进制。 堆内存里面的数据,都有默认值,规则: | |默认值| |--- |---| |整数|0| |浮点数|0.0| |字符|'\u0000'| |布尔|false| |引用类型|null| 3. 方法区(Method Area):存储.class相关信息,包含方法的【死】信息。 4. 本地方法栈(Native Method Stack):与操作系统相关。 5. 寄存器(pc Register):与CPU相关。 来源: https://www.cnblogs.com/blog-S/p/11336527.html

mybatis

笑着哭i 提交于 2019-11-27 00:25:37
   依赖注入框架可以创建 线程安全的 、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。 作用域 SqlSessionFactoryBuilder 局部变量,用于创建SqlSessionFactory SqlSessionFactory 应用运行期间 SqlSession 每个线程应该有自己的SqlSession,非线程安全,不能共享,所以它的最佳的作用域是请求或方法作用域 如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的作用域中 换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。 try (SqlSession session = sqlSessionFactory.openSession()) { // 你的应用逻辑代码 } 来源: https://www.cnblogs.com/siqi/p/11336508.html

第七章、函数基础之名称空间和作用域10

流过昼夜 提交于 2019-11-26 23:47:57
目录 第七章、函数基础之名称空间和作用域 一、名称空间 二、作用域 三、global关键字 四、nonlocal关键字 第七章、函数基础之名称空间和作用域 说明:函数内部的函数只能在函数内调用,不能在函数外部调用 一、名称空间 内存有一块内存存储变量名与变量间的绑定关系的空间,这个空间就叫做名称空间 1内置名称空间 内置名称空间:存放py解释器自带的名字,如 int、float、len 2全局名称空间 全局名称空间:除了内置和局部的名字之外,其余都放在全局空间,如下面代码中的 x\func\1\z 生命周期:在文件执行时生效,文件执行结束后失效 x = 1 def func(): pass l = [1, 2] if 3 > 2: if 4 > 3: z = 3 1.3 局部名称空间 局部名称空间 :用于存放函数调用期间函数体产生的名字,如下面的 f2 生命周期: 在文件执行时函数调用期间生效,在函数执行结束后失效 def f1(): def f2(): print('from f2') f2() f1() 1.4 加载顺序 由于.py文件是由Python解释器打开的,因此一定是在Python解释器中的内置名称空间加载结束后,文件才开始打开,这个时候才会产生全局名称空间,但文件内有某一个函数被调用的时候,才会开始产生局部名称空间,因此名称空间的加载顺序为:内置--》全局--》局部。

JSinDeep1:探索执行环境 (Execution Context)-ES3篇

情到浓时终转凉″ 提交于 2019-11-26 22:48:27
JSinDeep1: 探索执行环境 (Execution Context)-ES3 篇 声明 JSinDeep 系列文章主要内容为作者对 ECMA-262 标准 中一些概念的理解和探究,同时意在帮助大家快速理解。本着严谨的态度,同时又需避免 API 式的枯燥细节罗列。文章会以适当插图、例子去诠释概念,致力于通俗易懂。更具体、严谨、完整的描述建议阅读 ECMA262 文档。碍于作者水平有限,文中若有错误,欢迎大家批评指正。 *其它版本: English-Blog , English-PDF , Chinese-Blog , Chinese-PDF 概要 在我们写JavaScript代码时会定义一些变量、函数等。解释器在执行这些代码时是如何处理并找到我们定义的这些数据的?在程序执行时,引用这些变量等操作的背后都发生了什么?本文主要探讨 ECMA-262-3 标准 中的执行环境 (Execution Context) 及与之相关的一些内部机制和模型。 定义 当程序执行的控制权转移至ECMAScript可执行代码时,会进入到一个执行环境中 (Execution Context,缩写为EC) 。在一个EC内也可能进入到一个新的EC,这些EC逻辑上 1 会形成一个栈 (Stack) 。 EC 是程序运行时动态创建的。例如:每一个函数在被调用时都会创建一个EC,重复调用函数 (包含递归调用的情形

ES6笔记之参数默认值(译)

て烟熏妆下的殇ゞ 提交于 2019-11-26 22:46:19
原文链接: http://dmitrysoshnikov.com/ 原文作者:Dmitry Soshnikov 译者做了少量补充。 这样的的文字是译者加的,可以选择忽略。 作者微博: @Bosn 在这个简短的笔记中我们聊一聊ES6的又一特性:带默认值的函数参数。正如我们即将看到的,有些较为微妙的CASE。 ES5及以下手动处理默认值 在ES6默认值特性出现前,手动处理默认值有几种方式: function log(message, level) { level = level || 'warning'; console.log(level, ': ', message); } log('low memory'); // warning: low memory log('out of memory', 'error'); // error: out of memory 为了处理参数未传递的情况,我们常看到typeof检测: if ( typeof level == 'undefined' ) { level = 'warning' ; } 有时也可以检查arguments.length if (arguments.length == 1 ) { level = 'warning' ; } 这些方法都可以很好的工作,但都过于手动且缺少抽象。ES6规范了直接在函数头定义参数默认值的句法结构

函数基础(二)

守給你的承諾、 提交于 2019-11-26 22:44:41
可变长参数 可变长参数:指的是在调用函数时,传入的参数个数可以不固定 调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接受溢出的位置实参(*)与关键字实参(**) 牢记 一、可变长形参之* 形参中的*会将溢出的位置实参全部接收,然后存储为元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。 def func(name, pwd, *args): # *后可以跟其他参数,例如abc,但尽量不要使用,应该使用args,args是约定俗成的 print('name:', name, 'pwd:', pwd) print(args) # args会接收多余的位置实参,以元组形式存储 return 1 res = func('xiaowu', 123456, 18, 170, 140) print(res) # name: xiaowu pwd: 123456 # (18, 170, 140) # 1 二、可变长形参之** 形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs def func(name, pwd, **kwargs): # **后可以跟其他参数,但尽量不要使用,应该使用kwargs

Spring入门

风流意气都作罢 提交于 2019-11-26 21:09:52
Spring是Java里非常经典的框架,由Rod Johnson创建,其已经成为Java EE行业标准,用于解决一站式服务,接下来入门学习一下。 什么是Spring 开源的,用来简化企业级应用开发的应用开发框架,是一款轻量级的框架,一共有2200多个类。 简化开发 Spring对常用的API做了封装(比如JDBC),这样就可以大大简化这些API的使用,如SpringJDBC的使用,不需要我们考虑创建连接和关闭连接。 解耦 设计有一个基本原则,即高内聚低耦合,即类的职责越单一越好,并且对类进行维护时,避免"牵一发动全身"的情况。 高内聚 :类的职责需要单一 低耦合 :Spring帮忙建立对象之间的依赖关系,对象之间的耦合度会大大降低,代码的可维护性大大提高 。 以前如果A类需要调用B类的一个方法,需要先在A类中先new一个B类的对象,然后调用B类对象的方法 , 如果A类不想调用B类的方法,想改成调用C类的方法,则A类中的语句需要相应的修改,耦合度就 相应 提高了 。 Spring 的出现, 会 自动 帮忙管理对象之间的 依赖 关系,对象通过容器和配置文件来创建,降低耦合度 。 集成其他框架 Spring可以将其他的一些框架集成进来(比如定时任务处理的Quartz,数据库连接相关的MyBatis),方便这些框架的使用。在Spring管理对象的基础上

Day12之函数作用域这一批内容

时间秒杀一切 提交于 2019-11-26 20:59:08
我总是在抱怨,抱怨上海太阳大,气温高,然后上帝给我来了一场18级台风,谢谢您了,cnm 但是我我们python人绝不认输 在这样恶劣的环境里,依然有9人组成的人工智能展览会观赏小分队迎男而上了(为了免费的午饭) 最后经过了重重爆风雨的洗礼。 被告知不包午饭。 靠! 今天的各位憨憨有没有给自己打气啊,我哭了 今日洗脑金句: 出行切忌要带伞,台风天气都随缘。 可变长参数 一、可变长形参之*(有用) 当我们在给函数传参数的时候,要是传了贼多的实参,而函数定义的时候只定义了两个形参,那么怎么样,才能把全部的参数都接受过来? 用* 就可以。 形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给 后的参数。需要注意的是: 后的参数名约定俗成为args。 def sum_self(*args): res = 0 for num in args: res += num return res res = sum_self(1, 2, 3, 4) print(res) 10 这个时候又有一些调皮的同学问了 “诶我为什么不能直接定义对应数量的形参呢?” 我传一百个实参进去,你去定义去吧,886 二、可变长实参之*(垃圾) 实参中的**,* 会将 * 后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。 nick:

函数进阶

我的梦境 提交于 2019-11-26 20:26:21
楔子 假如有一个函数,实现返回两个数中的较大值: 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解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是 当遇到函数定义的时候解释器只是象征性的将函数名读入内存 ,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。