Pytho全局变量and局部变量

1.作用域

作用域就是指命名空间,python创建、改变或查找变量名都是在所谓的命名空间中。

1.局部变量

局部变量,是指在函数内部或代码块中定义的变量,在没有其他操作的情况下,只有内部可以进行访问。

2.全局变量

定义在所有函数之外的变量。

3.局部and全局Test

我们定义一个函数myfun()在里面定义一个局部变量 我们在函数内部使用print()方法会打印出a的值。

def myfun():
	a = 100 #函数内部定义一个局部变量 a
	print(a)
myfun()

100

如果在函数外部使用print()打印一下会出现什么结果呢?

def myfun():
	a = 100
	print(a)

print(a)

NameError: name 'a' is not defined

这时候会给我们提示报错信息 NameError: name 'a' is not defined,没有找到 a 

这是因为在函数内部定义的变量只有在函数内部可以访问的到,在函数外面是访问不到局部变量的值的。

如果我们定义一个全局变量,在函数内部和外部是否都可以访问的到呢?

a = 100 #在函数外面定义一个全局变量 a
def myfun():
	print("我是函数内部打印的a,我的值为:{}".format(a))

myfun() #调用函数

print("我是函数外部打印的a,我的值为:{}".format(a))

我是函数内部打印的a,我的值为:100
我是函数外部打印的a,我的值为:100

我们可以看得到,在函数外面定义的全局变量 a,无论是在函数内部还是在函数外面都是可以访问的到的,说明全局变量在函数内部和外部是否都可以访问的到。

我们不妨试想一下,在函数内外定义一个变量名相同值不同的变量,我们进行访问会出现什么结果。

a = 100 #全局变量的值为100
def myfun():
    a = 200 #局部变量的值为200
    print("我是函数内部打印的a,我的值为:{}".format(a))
	
myfun()

print("我是函数外部打印的a,我的值为:{}".format(a))

我是函数内部打印的a,我的值为:200
我是函数外部打印的a,我的值为:100

      结果显而易见,在函数内部打印的是函数内部定义的变量的值,在函数外面打印的是在函数外面定义的变量的值,根据上面的几个小例子,我们不难总结出:当只在函数内部定义变量而没有定义全局变量的时候,函数外部是访问不到函数内部的变量的,当定义了全局变量而没有在函数内部定义局部变量的时候,函数内部和外部都可以访问的到全局变量的值,当定义的全局变量和局部变量的变量名相同的时候,函数外部访问的是全局变量的值,函数内部会优先访问局部变量的值,当函数内部没有定义局部变量的时候才会访问全局变量的值

4.拓展

在函数内部想去改变同名的全局变量的值该怎么做呢?

这时候我们要用到global关键字。

a = 100
def myfun():
    global a #使用global关键字修饰
    a = 200
    print("我是函数内部打印的a,我的值为:{}".format(a))
	
myfun()

print("我是函数外部打印的a,我的值为:{}".format(a))

我是函数内部打印的a,我的值为:200
我是函数外部打印的a,我的值为:200

这时候我们就改变了全局变量的值,如果没有定义全局变量并且不用global修饰会出现什么结果呢?

我们可以测试一下:

def myfun():
    a = 123
    print("我是函数内部打印的a,我的值为:{}".format(a))
	
myfun()

print("我是函数外部打印的a,我的值为:{}".format(a))

我是函数内部打印的a,我的值为:123

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/123.py", line 8, in <module>
    print("我是函数外部打印的a,我的值为:{}".format(a))
NameError: name 'a' is not defined

结果显而易见,外部打印出现了错误,这是我们用global修饰一下,感受一下global的作用

def myfun():
    global a 
    a = 123
    print("我是函数内部打印的a,我的值为:{}".format(a))
	
myfun()

print("我是函数外部打印的a,我的值为:{}".format(a))

我是函数内部打印的a,我的值为:123
我是函数外部打印的a,我的值为:123

这说明,在没有创建全局变量的情况下,使用global关键字修饰局部变量,就相当于定义一个新的全局变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学者山羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值