首页 热点资讯 义务教育 高等教育 出国留学 考研考公

全局变量和 局部变量的区别?

发布网友 发布时间:2022-04-23 09:27

我来回答

10个回答

懂视网 时间:2022-04-29 12:24

python全局变量和局部变量的区别

全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。

推荐:Python教程

#!/usr/bin/python3
# -*- coding: utf-8 -*-

A = 100 # 全局变量一般用大写字母表示

def func():
 a = 50 # 局部变量一般用小写字母表示
 print(a+A)

func()
print(A)
print(a) # 报错信息NameError: name 'a' is not defined

1.png

#!/usr/bin/python3
# -*- coding: utf-8 -*-

A = 100

def func():
 A=250
 print(A)

print(A) # 打印全部变量
func() # 局部变量

2.png

如果想在函数内部改变全局变量,需要在前面加上global关键字,在执行函数之后,全局变量值也会改变。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
A = 100

def func():
 global A
 A = 200
 print(A)


print(A) # 打印全局变量
func() # 局部变量
print(A) # 改变后的全局变量

如果全局变量是列表类型,可以通过list的列表方法去对列表进行修改,并且可以不用global来声明。

list_1 = [1,2,56,"list"]

def changeList():
 list_1.append("over")
 print(list_1)

changeList()
print(list_1)

3.png

在函数内部,如果局部变量与全局变量变量名一样,则优先调用局部变量。

众多python视频教程,尽在PHP中文网,欢迎在线学习!

热心网友 时间:2022-04-29 09:32

区别:

局部变量:“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。

全局变量:“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。  

当有外部变量时,main函数中的同名变量就是全局变量。如果没有外部变量,main函数里的变量依然是局部变量。 

目的:增加函数间数据联系的渠道。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值,相当于各个函数之间有直接的传递渠道。

扩展资料:

在现代的面向对象语言如Java,C++,C#,Ruby中,由于变量都是封装在类里面的,对别的类不可见,所以已经几乎完全抛弃了全局变量的概念。然而,可以通过把一个类定义为public static,把类成员变量也定义为public static,使该变量在内存中占用固定、唯一的一块空间,来实现全局变量的功能。

参考资料:百度百科全局变量

热心网友 时间:2022-04-29 10:50

一、有效范围不一样

局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;

全局变量的有效范围是从定义变量的位置开始到本源文件结束。

二、内存空间不同

局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;

全局变量是程序运行时事先分配内存空间,当程序结束时释放内存。

三、使用区间不同

全局变量:作用于整个c程序文件;

局部变量:作用于所属语句块或函数中。

扩展资料

全局变量是编程术语中的一种,源自于变量之分。

变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

参考资料

百度百科-全部变量

百度百科-局部变量



热心网友 时间:2022-04-29 12:25

全局变量和局部变量的区别如下:

1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等

2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区

3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了

4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量。

扩展资料:

局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。

全局变量是编程术语中的一种,源自于变量之分。

变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

热心网友 时间:2022-04-29 14:16

全局变量与局部变量的区别在于作用域的不同,且存在时间也可能不同。不管有不有外部的变量,main函数中的变量都不能称为全局变量。

全局变量是可以被本程序所有对象或函数引用。

例如:

图中的代码,t1为全局变量,可以在main函数中使用,也可以在a函数中使用。

而t2 t3则为局部变量,它们只能在花括号内部被使用。

所以a函数不能使用t2,main函数也不能使用t3。

拓展资料:

全局变量和局部变量在内存上的不同:

局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。


热心网友 时间:2022-04-29 16:24

我认为只要是extern定义的变量都是全局变量,还有只要是在main函数外的就是全局变量,不加extern的在main函数里面得就是局部变量!

全局变量是指在整个程序中都可用,而局部变量只是在定义他的那个{}里可用!出了那个{}他就没意义了!

你这个程序是函数的参数调用!程序的意思是:定义了两个全局变量(个人认为这里定义成局部变量也没什么)并比较这两个变量中最大的值。这里是调用了一个用户自定义函数来比较的!

热心网友 时间:2022-04-29 18:49

最佳回答有错误。extern是声明。声明和定义都分不清就不要误导别人了!
问题其实很简单,函数{}里的是局部变量,反之是全局变量,和extern无关。

热心网友 时间:2022-04-29 21:30

全局变量是自变量会影响因变量,而局部变量只是影响部分因变量。

热心网友 时间:2022-04-30 00:28

都有外部变量是变量和局部变量是有区别的l

热心网友 时间:2022-04-30 03:59

你定义变量的时候是定义的数据空间你操作变量的时候是对,空间存入的串操作(当然设计运算还有其他类型)你在哪里定义的变量就继承哪里的空间可见度,一个程序或者WIN下的一个pe含有一个main的主空间(dll不解释了:被动型pe)和其他所有子程序的空间,main的数据空间是其他所有子程序可见的,子程序空间互相不可见,如涉及的参数的传入传出(传递),可以方便定义到全局即可,你在子程序里可读取和写入主程序的数据空间,不同进程(PE文件)可以依靠缓冲区首地址进行堆栈或队列甚至是链式的块数据传送,对于小于32//128位空间数据可以用串传送,貌似winapi是用eax传送返回数据,调用参数需要事先在全局空间里声明
变量编译后是如何在内存中被寻址的呢:现在流行的什么动态语言和什么静态语言,其实是使用静态物理空间的方式方法的不同而已静态语言比较严格,不易出错,动态语言是采用类似咱们的虚拟内存的方法,来回倒腾而已,有个假的就像是寻址空间上限的地址空间。
pe文件(2进制可执行文件)的节对应系统的不同内存。你的工程文件在被编译或解释执行的时候整个源文件扫描出来的空间定义(常变量声明)不论位于那个位置(源文件是单维度顺序走下来的)都会放到数据区,你对变量的操作,会放到代码区如mov,inc ,串操作等。那么寻址是怎么解决的呢?都是以偏移offset来的包括主子程序的入口点。编译的时候是以静态的4大家都一样的空间,加载到内存时就会按页加载并 修改偏移量。
那么在内存中是怎么知道 寻找变量a和变量b的地址呢?也就是说我如果调用插件或api甚至工程本体的程序并需要寻址时候怎么弄,这就是在编译的时候已经把所有的标识符包扩程序子程序命中等等只要是标识符,一概用地址替换。这也对应了如果你要调用其它pe的子程序,你需要事先声明,例如:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
这是带返回值的函数,所以要在本体进程内流出返回值的空间,编译的后并执行时就会被加载的函数使用该空间地址

如你的源文件可能是这样 mov a,b
编译后在反编译你会看到 mov 12345678,87654321
别在一我的语法就是这个意思,所以不同的pe节放在不同的内存空间,不同的数据可见度放在不同的内存空间,所以你的读写会受保护和受*
我基本上喜欢一概用全局。基本上不涉及多线程的话不需要太在意,除非你是大工程,尤其需要注意内存回收则可多利用动态的局部变量
如果你要问sub和fuctiong函数和非函数,主要区别是形式上函数带返回值。
编译后就没有什么函数不函数了,机器指令就两大类 jump类(有无条件)call(配合ret也可盗取堆栈里的返回地址。。)

PS:多线程和互联网也尤其涉及该问题,互斥锁是门学问,尤其是互联网编程,互斥和负载均衡。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com