问个钻牛角尖的问题,Pythonh的全局变量

jin25973970 2019-09-09 09:10:45
刚接触Python不久,遇到个想不明白的逻辑问题,全局变量,自己的理解它是个无法无天的存在,既然可以在全局使用,那么为什么在定义函数时,要用GOBAL来声明才能使用全局变量,不是全局吗?拿来用就好了啊。

虽然说全局变量的语法和用法CSDN上的大神写的知识博客里讲的很清楚 ,但心里总有这样一个疙瘩,有哪位大神能用通俗语言去化解小弟的疙瘩吗,感激不尽哈
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
海鸥软件 2019-12-23
  • 打赏
  • 举报
回复
global 显示表示该变量是全局变量,定义在函数体外或函数体内,是在所有函数中可以直接使用,但是,如果在某个函数中你对相同名字的变量进行了赋值,但这个变量前面没加global,会造成同名变量覆盖,表示这个变量只作用于本函数,并且在本函数中对该局部变量赋值、读取,只对本函数起作用,不影响用global定义的同名全局变量。python语言没有明显的定义过程 ,但你可以这样理解,只要在某个函数体中给一个变量赋值啦,并且没有给这个变量加任何修饰符,那就证明这个变量只作用于本函数体中,就是一个局部变量;否则使用global定义过的变量,无论是在函数体外定义还是在函数体内定义 ,那么使用的这个变量就是全局变量;或者在函数体外定义的没有加任何修饰符的变量(非显示定义),也是全局变量,即以下实例中第一行可以省略,就是这意思。

简单一点:
全局变量就像是太阳,照亮地球所有人家,所有人家都可见;
局部变量就是像是任何某一家里的电灯泡,只对本家有作用。


测试实例如下:
global x#这行可以省略

def a():

x=1

return x

def b():



return x

def c():

global x

x=20

return x


def d():


x=2

global x

x=30

a=x

print('a:=',a,'x=',x)

if __name__ =='__main__':

x=10


print(a())#输出a()函数中局部变量值 1

print(b())#输出全局变量值,a()函数改变没有影响全局变量值 10
print(c())#输出全局变量值 20,在c()函数中改变了全局变量值。

print(a()) #输出a()函数中局部变量值 还是 1,c()函数改变没有影响到a()函数的局部变量值

print(b())#输出全局变量值 20,c()函数改变全局变量值,故全局变量值改变

d()
jin25973970 2019-09-12
  • 打赏
  • 举报
回复
[size=18px]感谢楼上回复,但。。。你们的回答我并不满意,还好自己想通了,用GOLBAL语句是最终为了起到保护全局变量的作用,结贴[size=18px]
小羽Jary 2019-09-10
  • 打赏
  • 举报
回复
如果局部有相同的变量,会优先使用局部的。但如果加了global就会优先使用全局的
手无护鸡之力 2019-09-10
  • 打赏
  • 举报
回复
是可以直接拿来用,那是不冲突的前提下

global x
x = 999


def add():
    x = 3

def add2():
    global x
    x = 3

add()
print(x)
add2()
print(x)
out: 999 3
海鸥软件 2019-09-10
  • 打赏
  • 举报
回复
在函数内加了global 使用的是全局变量,不加是局部变量
  • 打赏
  • 举报
回复
这个就是优先级的问题,函数的话会先找函数内部的,函数内部没有,才会找全局的,顺序依次是:局部-》嵌套-》全局-》模块-》内置
jin25973970 2019-09-09
  • 打赏
  • 举报
回复
恭请大神
恭请大神
恭请大神

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧