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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章