Python 中小谈global 全局变量

全局变量标志:global

工作中碰见了global全局变量,发现自己不太明白,在这记下来。。。

a = 1

def fun1():
	a = 2
	print("In fun1 a is:{}".format(a))

def fun2():
	global a
	a = 2
	print("In fun2 a is:{}".format(a))

if __name__ == '__main__':
	print("Before fun1 a is:{}".format(a))
	fun1()
	print("Now a is:{}".format(a))
	fun2()
	print("After fun2 a is:{}".format(a))

结果为

Before fun1 a is:1
In fun1 a is:2
Now a is:1
In fun2 a is:2
After fun2 a is:2

可以看出在fun1虽然在内部修改了a,但是此时a只是一个局部变量,全局变量a的值依旧为1。

但是

当在fun2中给a加了“global”标签后 再对a进行修改赋值,此时全局变量a就发生了改变。

当全局变量为一个数组时:

a = [1,2,3]

def fun1():
	a[1] = 1 
	print("In fun1 a is:{}".format(a))


def fun2():
	global a
	a[1] = 3 
	print("In fun2 a is:{}".format(a))

def fun3():
	a = [1,2]
	print("In fun1 a is:{}".format(a))



if __name__ == '__main__':
	print("Before fun1 a is:{}".format(a))
	fun1()
	print("Now a is:{}".format(a))
	fun2()
	print("After fun2 a is:{}".format(a))
	fun3()
	print("After fun3 a is:{}".format(a))

此时的结果为:

Before fun1 a is:[1, 2, 3]
In fun1 a is:[1, 1, 3]
Now a is:[1, 1, 3]
In fun2 a is:[1, 3, 3]
After fun2 a is:[1, 3, 3]
In fun1 a is:[1, 2]
After fun3 a is:[1, 3, 3]

哟,这个结果就有点神奇了

fun1引用全局变量并修改其中的元素时,虽然没有加global标签,但是a的值却变了!!!

fun2的a(加了global标签)表现平平,没有波澜~~~

fun1表现突出的原因在这里就不说了(个人猜测与python数据的内存引用有关)

结论:

  1. 想要引用但不修改全局变量,不需要加global标签;
  2. 想要修改全局变量时,需要加global标签;
  3. 例外:当变量是列表或元组时,若只修改元素的值,不需要加global标签就可直接修改

参考:https://www.cnblogs.com/yanfengt/p/6305542.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值