-
Python:变量作用域 什么是全局变量、局部变量
2018-09-09 10:52:22变量的作用范围: 全局变量:在整个全局范围都有效 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量) 局部变量在局部范围可以使用 局部变量在全局范围无法使用,在局部范围内(比如函数)将局部...变量作用域
变量由作用范围来限制,按照作用域分类可分为:
- 全局(global): 在函数外部定义
- 局部(local):在函数内部定义变量的作用范围:
- 全局变量:在整个全局范围都有效
- 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量)
- 局部变量在局部范围可以使用
- 局部变量在全局范围无法使用,在局部范围内(比如函数)将局部变量用global函数定义为全局函数,并且调用了此函数后,在全局范围内能调用此局部变量。
LEGB原则
L(Local)局部作用域
E(Enclosing function locale)外部嵌套函数作用域
G(Global module)函数定义所在模块作用域
B(Buildin): python内置魔抗的作用域
global函数
使用global函数可以将局部范围内(比如函数)的局部变量提升为全局变量。
def fun(): global a2 global a3#将a2、a3定义为全局变量 a2=20 print(a2) a3 =99 print(a3) #print(a2)调用函数前,调用内部变量a2会报错 fun()#只有在调用此函数后,内部的局部变量才能被调用 print(a2) print(a3) 20 99 20 99
再举一个例子
b2 = 22#全局变量 def fun(): b2 = 99#局部变量 print(b2) print(b2) fun()#函数调用全局变量,输出b2=99 print(b2)#函数内部没定义b2为全局变量,所以依然输出为22 22 99 22
globals, locals函数
可以通过globals和locals显示出局部变量和全局变量,可以从我之前编的汉诺塔程序体会到Locals函数的好处,可以帮助理解递归中,各个变量的赋值变化。
locas函数:
函数功能为,返回当前作用域内的局部变量和其值组成的字典,与globals函数类似(返回全局变量),可用于函数内。函数所返回的字典集合不能修改,不知道能不能将其转换为列表进行更改,下次试试。
def hanoi(n,a,b,c): if n==1: print(a,'-->',c) else: print(locals()) hanoi(n-1,a,c,b)# print(locals()) hanoi(1,a,b,c) print(locals()) hanoi(n-1,b,a,c) print(locals()) hanoi(3,'A','B','C') {'c': 'C', 'b': 'B', 'a': 'A', 'n': 3} {'c': 'B', 'b': 'C', 'a': 'A', 'n': 2} A --> C {'c': 'B', 'b': 'C', 'a': 'A', 'n': 2} A --> B {'c': 'B', 'b': 'C', 'a': 'A', 'n': 2} C --> B {'c': 'B', 'b': 'C', 'a': 'A', 'n': 2} {'c': 'C', 'b': 'B', 'a': 'A', 'n': 3} A --> C {'c': 'C', 'b': 'B', 'a': 'A', 'n': 3} {'c': 'C', 'b': 'A', 'a': 'B', 'n': 2} B --> A {'c': 'C', 'b': 'A', 'a': 'B', 'n': 2} B --> C {'c': 'C', 'b': 'A', 'a': 'B', 'n': 2} A --> C {'c': 'C', 'b': 'A', 'a': 'B', 'n': 2} {'c': 'C', 'b': 'B', 'a': 'A', 'n': 3}
-
java中的静态变量的作用域_Java变量的作用域
2021-02-28 18:21:25Java变量的作用域所谓变量的作用域就是变量的有效范围。通过后面内容的学习大家会更加明白,实际上局部变量、实例变量、静态变量它们存储在Java虚拟机的不同内存区域上,所以变量是有作用域的。关于变量的有效范围,...Java变量的作用域
所谓变量的作用域就是变量的有效范围。通过后面内容的学习大家会更加明白,实际上局部变量、实例变量、静态变量它们存储在Java虚拟机的不同内存区域上,所以变量是有作用域的。
关于变量的有效范围,在这里我给大家总结了一个口诀:出了大括号就不认识了。虽然这句话属于大白话,但很实用。我们来测试一下:
public class VarTest05 {
//后面会学习为什么这里的变量定义为静态变量
static int i = 1000;
public static void main(String[] args) {
System.out.println("k = " + k);
int k = 100;
System.out.println("k = " + k);
int i = 2000;
System.out.println("i = " + i);
}
//后面会学习方法怎么定义
public static void m1(){
System.out.println("k = " + k);
}
public static void m2(){
System.out.println("i = " + i);
}
}
编译报错了:
图3-6:变量的作用域
通过以上的测试我们发现:
● 方法体当中的代码是有执行顺序的,遵循自上而下的顺序依次逐行执行,变量在没有声明的时候是不能访问的,需要先声明,接下来才能访问。
● 另外在main方法中声明的变量k有效范围是main方法,只能在main方法中使用,出了大括号就不认识了,在m1方法中是无法访问的。
● 在类体当中声明的变量i作用域是整个类体,所以在m2方法中是可以使用的。
修改以上代码并运行:
public class VarTest05 {
//后面会学习为什么这里的变量这个时候定义为静态变量
static int i = 1000;
public static void main(String[] args) {
//System.out.println("k = " + k);
int k = 100;
System.out.println("k = " + k);
int i = 2000;
System.out.println("i = " + i);
}
//后面会学习方法怎么定义
public static void m1(){
//System.out.println("k = " + k);
}
public static void m2(){
System.out.println("i = " + i);
}
}
运行结果如下图所示:
图3-7:变量作用域
通过以上程序的运行结果得知,java是遵循就近原则的,在类体当中有i变量,在main方法中声明了i变量,那么在main方法中一定访问离自己最近的变量,也就是就近取材,这就是就近原则,几乎所有的编程语言都是这样的。
-
java二级的范围_什么是变量的作用域?计算机二级考试Java
2021-02-27 20:37:53变量的作用域变量的作用域(scope)是指变量能够被引用的区域,也就是可以使用该变量的程序范围。截止到目前为止,我们在程序例子中声明的变量都被定义在main()方法内。在一个方法内声明的变量被称作局部变量(local...变量的作用域
变量的作用域(scope)是指变量能够被引用的区域,也就是可以使用该变量的程序范围。截止到目前为止,我们在程序例子中声明的变量都被定义在main(
)方法内。在一个方法内声明的变量被称作局部变量(local
variable),它们只能在声明它们的方法中被访问,但并不是在声明它们的方法中的任何位置都可访问。请看下面这个例子,它在方法中又内嵌了一个块。
int a=1; //Declear and define a
//Reference to a is ok here
//keference to b here is an error
{
//Reference to a here is ok
//Reference to b here is untill an error
int b=2; //Delear and define b
//Reference to a and b are Ok here -b exists new
}
//Reference to b is an error here here-it doesn't exist
//Reference to a is still ok though
一个变量在声明前并不存在,只有被声明后才可以对它进行引用。在定义它的块结束前一直存在,其中包括该块内嵌套的所有块。变量b只能在最内层的块中存在。在最内层的大括号之后,b就不存在了。而变量a在大括号结束前一直存在。
因此,局部变量的访问规则很简单。它们可被访问的范围是:在程序中,从声明它们的位置开始,到声明它们的块结束处。在声明它们的块结束之后,就不能再被访问了。我们可以用下个例子演示它:
试试看--作用域。
我们将定义方法main()说明如何应用变量作用域工作。首先,我们声明并初始化变量outer,然后开始一个内层块。在该块内,我们将定义一个变量inner.在块结束之后,我们将再次声明变量inner并再次使用它。
piblic class scope
{
syetem.out.println("inner *"+inner);//Uncooment this for an error 1 error
如何工作
在这个程序中的方法main()内只嵌套了一个块。变量outer在开始处就被定义,所以在方法main()的任何地方,包括嵌套的所有块中都可以引用它。变量不能被重复声明,若将注释标志删除,在内层块中被注释起来的变量outer的声明语句就会导致编译错误。
变量inner在嵌套块内定义并被赋初始值2,从它的声明处到内层块结束处,你都可以它进行引用。在内层块结尾的大括号之后,变量inne:不再存在,所以被注释起来的引用~的输出语句是非法的。然而,因为变量mtier己经不存在,所以我们可以用同样的名字声明另一个变量并将它赋初值为3.
注意:所有这些都说明了局部变量的生存期。重新定义一个已经不存在的变量并不是一个好的做法,因为这很容易引起混乱。虽然,我们在上述例子中仅使用了int类型变量,但是变量的作用域规律对所有类型的变量来说都是一样的。
有另一种被称为类变量的变量,当用一种特定的方法声明它们时,它们可以拥有很长的生命期。例如,在标准的类Math中变量PI和E就是这种类型变量,只要你的程序处于运行;它们就可被使用,还有另一种被称为实例变量的变量,它是构造类对象,我们将在第5章中进一步学习这方面的内容。
考无忧小编推荐:
更多计算机等级考试真题及答案>>>点击查看
想知道更多关于计算机等级报考指南、考试时间和考试信息的最新资讯在这里>>>
本文网址:http://www.k51.com.cn/info/jsjdjks/1802/0226640.html
-
成员变量与局部变量作用域重叠
2018-01-30 14:59:00所以,实际上,全局变量和局部变量和内存并不存在绝对直接的关系。实际上,不管是全局的还是局部的变量,他的标识都是保存在栈里面的。成员变量作用域在整个类,方法中为什么可以再重复定义?因为在java中,局部定义...实际上,java里面,在同一个作用域下,不能定义一样的标识符(也就是你做说的变量名)。为什么呢?因为,他需要保证你在某个作用于下使用某个标识符的时候,JVM能够正确进行区分!所以,实际上,全局变量和局部变量和内存并不存在绝对直接的关系。实际上,不管是全局的还是局部的变量,他的标识都是保存在栈里面的。
成员变量作用域在整个类,方法中为什么可以再重复定义?
因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助。如:
class A{
int i=10;
void f(){int i=100;
System.out.println(this.i);//全局
System.out.println(i);//局部
}
} -
python什么是闭包的作用域_什么是闭包?变量作用域和闭包。
2020-12-17 13:59:43js 文档的时候经常会设置变量,变量的类型有两种:全局变量局部变量这两种类型的变量有者不同的作用范围,全局变量的作用范围是面向整个文档的,可以称之为全局作用域,局部变量是在函数内部设置的,作用范围为当前... -
什么是Python变量作用域
2021-01-20 00:10:30在程序中定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。 根据定义变量的位置,变量分为两种: 局部变量:在函数中定义的变量,包括参数,都被称为局部变量。 全局变量:在函数外面、... -
JS变量的作用域
2020-03-22 18:22:01首先来了解一下什么叫变量的作用域? 所谓的变量的作用域,就是变量的使用范围,每一个变量都有自己的使用范围。通俗的来讲就好像美元和人民币一样,只能在自己的国家使用。 变量的作用域分为两种: 1,定义在函数之内... -
JavaScript变量的作用域
2020-03-17 20:27:13什么叫变量的作用域? 所谓的变量的作用域,就是变量的使用范围 每一个变量都有自己的使用范围 就好像Q币,只能在QQ号登录的业务中使用 王者荣耀的金币钻石,只能在王者荣耀的商城中使用 变量的作用域分为两种: ①定义... -
python变量的作用域
2018-02-01 19:21:20# 变量的作用域:全局变量作用域、局部变量作用域 # 全局变量:一般在函数、代码块外部声明的变量,被称为全局变量,作用域范围, # 是从声明的位置开始往下,一直到文件的末尾都可以使用 b = 10 # 局部变量:一般在... -
作用域之全局变量和局部变量
2019-03-10 16:45:04啥是作用域:一句话概括就是变量和函数的可访问范围 作用域分为三种:全局作用域(全局变量),局部作用域(局部变量),块级作用域(es6新增) 什么是全局变量(在函数外定义的变量) 什么是局部变量(在函数内... -
python中变量的作用域
2018-01-31 22:16:12变量的作用域:全局变量的作用域、局部变量的作用域 全局变量:一般在函数、代码块外部声明的变量,被称为全局变量,作用范围,是从声明的位置往下,一直到文件的末尾都可以使用 局部变量:一般在函数内部或代码块... -
函数作用域与局部变量
2019-05-30 23:03:41函数作用域:function 函数名(){ }大括号的范围就是 这个函数的作用域 全局作用域:整个页面 局部作用域:函数内部(大括号内) 局部变量:声明在某个函数内部的变量,只能在函数内部使用 全局变量:声明在所有函数外部的... -
Python 作用域、全局变量、局部变量
2018-01-27 17:15:52本文主要为大家简述Python作用域基础概念,从而明白什么是python 全局变量和局部变量。 什么是python作用域 作用域简单说就是一个变量的命名空间。代码中变量被赋值的位置,就决定了哪些范围的对象可以访问这个... -
变量的作用域和存储方法
2020-04-22 18:18:30变量的作用域:是指变量在程序中的作用范围。C语言中变量要先定义,后使用。但是定义变量要放在程序的什么位置?在程序的什么范围可以访问所定义的变量?作用域与变量定义的位置有关。 变量的生存期:是指变量存在... -
java 变量的作用域
2014-03-08 15:39:56什么是变量的作用域? 答:指的是变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就被确定了。 变量根据作用域的不同,可以分为哪几类? 答:4类。 1、成员变量:在类... -
变量的作用域--global
2018-01-31 21:11:50# -*- coding:utf-8 -*- 什么是作用域?就是指一个变量产生作用的范围,...变量的作用域:全局变量作用域,局部变量作用域 # 全局变量:(顶格写)一般在函数、代码块外部声明的变量,被称为全局变量,作用域范围,是从 -
基于python的-变量的作用域
2018-01-31 22:07:18# 变量的作用域:全局变量作用域、局部变量作用域 #------------------------------------------------------------------ # 全局变量:一般在函数、代码块外部声明的变量,被称为全局变量,作用域范围,是从声明的... -
Python函数变量作用域及其搜索范围
2020-07-05 06:52:03由此可见虽然变量a是同名的但是他们在不同位置所代表的含义并不同,这就是变量在不同位置有着不同的作用域。 1.变量的搜索顺序 当存在嵌套函数即函数套函数时,可能存在变量同名的情况,这些变量虽然名字相同但是... -
(第6天)6.3 变量的作用域
2020-07-30 06:40:07什么是变量的作用域呢?变量,前面已经学过;作用域,是计算机专业用语。变量的作用域,简单说,就是变量的使用范围。如下图所示,函数外的变量,我们称为全局变量,如变量a,它的作用域(使用范围)是整个黄色和... -
JavaScript变量、作用域、内存——作用域_作用域链
2020-09-11 22:55:34一、JS中的作用域 理解: 作用域:代码(变量|函数)在某一个地方的作用 (即变量|函数在JS中的什么地方,起的什么作用) 结论1: 在全局范围内,声明的变量和函数,其实都是window对象的属性或者方法 1.变量 弹出两个... -
什么是闭包?变量作用域和闭包。
2017-08-18 23:17:48这两种类型的变量有者不同的作用范围,全局变量的作用范围是面向整个文档的,可以称之为全局作用域,局部变量是在函数内部设置的,作用范围为当前的函数,外部不能直接引用,因此称为函数作用域。 var a=1; function... -
js变量作用域
2020-03-17 19:49:23什么叫变量的作用域? 所谓的变量的作用域,就是变量的使用范围 每一个变量都有自己的使用范围 变量的作用域分为两种 1,定义在函数之内的变量 包括函数的参数,定义在函数内部的变量,都称为局部作用域变量 / 局部... -
Python之函数的变量作用域
2020-06-22 09:55:43作用域是什么 变量作用域,其实就是变量可以在哪些范围内可以使用,哪些范围内不可以使用。这里只讲函数中变量的作用域,局部变量和全局变量 作用域的种类 面向过程编程就涉及函数的变量作用域,面向对象编程变量就... -
PHP的变量类型和作用域详解
2020-10-26 03:42:13什么是变量的作用域?变量的作用域是指在脚本的一次生命周期内变量的有效范围。一般来说有全局和局部之分 -
Python 基础 函数——变量的作用域
2020-11-27 17:44:55每个变量都有自己的作用域,更通俗地讲,就是在什么范围是可用。根据作用域,我们可以将变量氛围两种类型: 局部变量 全局变量 1.局部变量 每次函数的调用都会创建一个局部变量。 def f(): x=10 return x*x ... -
JS 丨作用域,变量作用域,作用域链学习笔记(一)
2020-09-13 21:08:23就是某个(变量)在某个范围内起作用和效果,出了这个变量的作用域就不起效果; 作用域主要分为2个,全局作用域和局部作用域; <script> // 1.全局作用域: 整个script标签下 或者是单独的js文件(外部js) /... -
2.2- python变量作用范围 局部变量和全局变量
2019-09-06 12:48:24在前面的案例中我们看到主程序中包含了函数...局部变量也称内部变量,局部变量是在函数内定义的,其作用域仅限于函数内,离开函数再使用这种变量是非法的。 例如: def sum(m): s=0 for p in range(m+1): s=s+p ... -
C/C++基础知识:变量的作用域
2021-02-03 13:56:09作用域范围是程序的区域,并从广义上说有三个地方可以变量声明: 内部函数或被称为局部变量 形式参数 - 函数的参数的定义 所有函数外的称为全局变量 下面就让我们来解释一下什么是局部和全局变量。 局部变量: ... -
javascript变量作用域
2016-09-04 18:25:541、什么是变量的作用域? 在js中,变量的作用指的就是变量起作用的范围 2、变量作用域的分类 js中变量的作用域分为全局作用域和局部作用域 3、怎么样区分? 根据function来划分 全局变量:在函数外定义的...