局部变量

函数进阶

橙三吉。 提交于 2019-11-30 19:30:15
阅读目录  楔子  命名空间和作用域  函数嵌套及作用域链  函数名的本质  闭包  本章小结 返回顶部 楔子 假如有一个函数,实现返回两个数中的较大值: 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解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是

为什么JDK代码这样写?final ReentrantLock takeLock = this.takeLock

喜你入骨 提交于 2019-11-30 19:12:53
在CopyOnWriteArrayList的源码中有一个细节值得学习,就是在addIfAbsent方法中ReentrantLock的用法,先是将一个这个成员变量this.lock重新赋值给一个局部变量lock之后再使用它,貌似跟java的内存模型有关,具体说明参考这篇文章:https://www.jianshu.com/p/04236d63f055 public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { final transient ReentrantLock lock = new ReentrantLock(); private boolean addIfAbsent(E e, Object[] snapshot) { // 开发过程中尽量将全局变量重赋给局部变量,尤其用局部变量做循环的情况 // 会一定程度上提升性能,也应该是代码的一般原则(general principle)。 final ReentrantLock lock = this.lock; lock.lock(); try { ...... ...... } finally { lock.unlock(); } } } 来源: https://www

ava语言支持的变量类型

烂漫一生 提交于 2019-11-30 18:47:22
Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰。 实例变量:独立于方法之外的变量,不过没有 static 修饰。 局部变量:类的方法中的变量。 Java 局部变量 局部变量声明在方法、构造方法或者语句块中; 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁; 访问修饰符不能用于局部变量; 局部变量只在声明它的方法、构造方法或者语句块中可见; 局部变量是在栈上分配的。 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。没有初始化,所以在编译时会出错: 来源: https://www.cnblogs.com/wsnan/p/11635511.html

闭包的作用及优缺点

让人想犯罪 __ 提交于 2019-11-30 14:49:36
在面试题中,闭包应该是必问的问题吧(以下内容纯属个人理解,欢迎大家指正不足) 下面我们就简单的了解一下闭包这个东西到底是什么 首先,我们先来讲讲什么是闭包 简单来说就是一个定义在函数内部的函数,可以读取到其他函数内部变量的函数,本质上,闭包就是一个把函数内部和外部连接起来的桥梁 那我们读取函数内部的变量为什么要用到闭包呢,或者说闭包的作用是什么? 这就涉及到变量的生命周期问题了,函数内部定义的变量属于局部变量,局部变量的生命周期是:当它所在的函数被调用的时候,就是开始,当调用执行一旦结束,局部变量就会被释放,当我们需要函数内部变量时,他已经被释放了,读取不到了,这个时候怎么解决?我们就要想办法延长他的生命周期 闭包的目的也可以说就是这个,延长局部变量的生命周期,当函数执行完毕以后,局部变量不可以被内存释放,然后让外部可以访问到这个变量 那我们如何判断闭包是不是存在呢 闭包主要有以下几个特点:   1、函数套函数,闭包一定有嵌套函数     这个意思从闭包的字面定义上其实就可以大概推出来,定义在函数内部的函数;     那为什么一定要函数套函数呢?因为需要局部变量,闭包的目的就是访问函数内部的局部变量,如果不定义局部变量,那就达不到我们的目的——延长变量生命周期   2、外层函数一定有局部变量,且内层函数一定操作了外层函数的这个变量   3、外层函数一定把内层函数返回外部

关于vc6.0中局部变量的问题

我们两清 提交于 2019-11-30 13:43:07
---恢复内容开始--- 大一新生,在使用vc6.0的过程中发现,在两个for循环中定义相同的变量的话,编译会报错,上网查了查大神们的说法,总结一下就是VC6.0编译器对C++语法支持不足,在使用更高版本的编译器后,均编译通过,刚开通博客园希望能在这里交流,成长,学习,个人拙见。 还有在入门使用vc6.0,的时候遇到过各种报错, vc6.0确实太老,嘻嘻,但是好像好多学校都是从VC或者DEV-C入门,以win10好多刚开始vc不能正常编译的,好多都是编译器路径设置的不对, tools->Options在这里根据你的装路基进行更改 ---恢复内容结束--- 来源: https://www.cnblogs.com/xiaojiansuibi/p/11595366.html

C++——局部变量、全局变量、静态变量与动态对象的性质(转载)

半城伤御伤魂 提交于 2019-11-30 13:38:35
原文: https://blog.csdn.net/u013921430/article/details/79279114 概述 局部变量 在一个函数内部定义的变量(包括函数形参),它只在本函数范围内有效 ,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的,这种类型的变量就称为“局部变量”。 局部变量存储在栈内存,在函数结束后自动销毁。 全局变量 在函数体外定义的变量,可以为本源文件中其它函数所公 用,有效范围为从定义变量的位置开始到本源文件结束,这种类型的变量就称为“全局变量”。全局 变量存储在静态存储区域(静态内存) 。 全局变量可以被同一工程项目中其他文件用extern声明后调用,对其每次进行修改都会被保存。 静态变量 静态全局变量 静态全局变量就是在原先的全局变量前面加上了static进行修饰。 静态全局变量依然存储在静态存储区。跟全局变量最大的不同在于,静态全局变量不能被其他源文件使用,只能被本源文件使用 ,对其每次进行修改都会被保存。 静态局部变量 静态局部变量就是在原先的局部变量前面加上了static进行修饰。 静态局部变量是静态变量因此存储在静态存储区内 ,等到整个程序结束才会被销毁。但是它的作用域依然在函数体内部。但是自从静态局部变量被定义后,每次对其进行修改都会被保存下来。 动态对象 动态对象是程序运行时分配的对象

二.函数进阶

◇◆丶佛笑我妖孽 提交于 2019-11-30 12:43:39
阅读目录  楔子  命名空间和作用域  函数嵌套及作用域链  函数名的本质  闭包  本章小结 返回顶部 楔子 假如有一个函数,实现返回两个数中的较大值: 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解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是

Python 可变对象/不可变对象 global

。_饼干妹妹 提交于 2019-11-30 09:34:44
如下代码, s = 'foo' d = {'a':1} def f(): s = 'bar' d['b'] = 2 f() print s # foo print d # {'a': 1, 'b': 2} 为什么修改字典d的值不用global关键字先声明呢? 这是因为,在s = 'bar’这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中,默认它的行为是创建局部变量,除非显式声明global,global定义的本地变量会变成其对应全局变量的一个别名,即是同一个变量。 在d[‘b’]=2这句中,它是“明确的”,因为如果把d当作是局部变量的话,它会报KeyError,所以它只能是引用全局的d,故不需要多此一举显式声明global。 上面这两句赋值语句其实是不同的行为,一个是rebinding(不可变对象), 一个是mutation(可变对象). 但是如果是下面这样: d = {'a':1} def f(): d = {} d['b'] = 2 f() print d # {'a': 1} 在d = {}这句,它是”有歧义的“了,所以它是创建了局部变量d,而不是引用全局变量d,所以d[‘b’]=2也是操作的局部变量。 推而远之,这一切现象的本质就是”它是否是明确的“。 仔细想想,就会发现不止dict不需要global,所有

成员变量和局部变量的区别?静态变量和实例变量的区别?静态方法和实例方法的区别?

我的未来我决定 提交于 2019-11-30 09:34:25
(成员变量 = 实例变量 + 静态变量) 成员变量和局部变量的区别? 成员变量定义在类中,方法外;局部变量定义在方法中。 成员变量在堆内存中(成员变量属于对象,对象进堆内存);局部变量在栈内存中(局部变量属于方法,方法进栈内存)。 成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用而存在,随着方法的调用完毕而消失。 成员变量有系统默认的初始化值;局部变量没有默认值,必须定义、赋值,才能使用。 java 运行局部变量和成员变量同名,如果成员变量和方法里的局部变量同名,局部变量会覆盖成员变量。如果需要在这个方法里引用被覆盖的成员变量,则可使用 this.(对于实例变量) 或类名.(对于类变量)的方式来访问成员变量。 静态变量和实例变量的区别? 静态变量前要加 static 关键字;实例变量不用加。 静态变量直接用类名调用即可;实例变量只能用对象调用。 静态变量存储在方法区的静态存储区,是所有对象共享的;实例变量存储在 Java 堆中,是每个对象私有的。(Java的方法区有个静态存储区,专门存放静态变量和静态块) 静态方法和实例方法的区别? 静态方法带有 static 关键字;实例方法没有 static 关键字。 静态方法直接用类名调用即可;实例方法只能用对象调用。 静态方法只能访问静态成员,不能访问实例成员;而实例方法可以访问静态成员和实例成员。

计算机基础总结

◇◆丶佛笑我妖孽 提交于 2019-11-30 07:20:52
目录 计算机基础之编程 什么是编程语言 什么是编程 为什么要编程 计算机组成 CPU 控制器 运算器 存储器 主存 外存 IO设备 输入设备 输出设备 32位和64位 多核cpu 机械硬盘工作原理 机械手臂 磁道 扇区 平均寻道时间 平均延迟时间 平均寻找数据时间 固态硬盘 操作系统 什么是文件 操作系统有什么用 计算机三大组成 操作系统的启动 应用程序的启动 编程语言的分类 机器语言 汇编语言 高级语言 编译型语言 解释型语言 网络的瓶颈效应 执行python程序的两种方式 交互式 命令行式 变量 什么是变量 变量的组成 变量名的命名规范 变量名的两种定义方式 常量 变量的三种打印方式 python变量内存管理 引用计数 垃圾回收机制 小整数池 花式赋值 链式赋值 交叉赋值 布尔类型 解压缩 python与用户交互 三种格式化输出的方式 %占位符 format格式化 f-string格式化 基本运算符 算术运算符 逻辑运算符 比较运算符 成员运算符 身份运算符 赋值运算符 位运算符 运算符的优先级 流程控制之if判断 单分支结构 双分支结构 多分支结构 if嵌套 流程控制之while循环 while + continue while + break while + else 条件控制while循环 while嵌套 流程控制之for循环 for + break for +