Python3——局部變量和全局變量
阿新 • • 發佈:2018-03-18
情況 png oba 生效 span nbsp ima mov 重新
在函數裏定義的變量就叫局部變量,定義在函數外部的一級代碼的變量叫全局變量
結果:
jake
alex
兩個變量雖然都叫name但不是一回事,互不相幹
如果函數內沒有定義與全局變量重名的局部變量,在函數內是可以調用該名稱的全局變量的
name = ‘alex‘ def change_name(): #name = ‘jake‘ print(name) change_name() print(name)
結果:
alex
alex
總結:
1、(函數內查找調用變量)優先級:局部變量 > 全局變量(如果全局和局部都有一個相同名字的變量的情況下)
2、在函數外是不能調用函數內的變量(局部變量),局部變量只能局部生效
3、在函數內部可以引用全局變量,而不能對全局變量重新賦值,如果要在函數內修改全局變量而不是重新定義一個新的局部變量,就要用到global(一般情況下不建議使用,因為在這個函數內改了全局變量,可能會影響到其他函數調用該全局變量)
name = ‘alex‘ def change_name(): global name #先聲明 name = ‘jake‘ #再修改,兩者順序不能顛倒 print(name) change_name() print(name)
結果:
jake
jake
3.1、上面的例子我們只是對字符串進行了測試,要對一個字符串全局變量重新賦值就要用到global,但對於列表、集合、字典,雖然不能重新賦值(不用global的前提下),但可以重新修改其中的元素:
list = [‘alex‘,‘jake‘,‘rain‘] dict = {‘alex‘:1,‘jake‘:2,"rain":3} set = {1,2,3,4,5} def change_name(): list[1] = ‘cody‘ dict[‘jake‘] = 4 set.remove(5) print(list) print(dict) print(set) change_name() print(list) print(dict) print(set)
結果:
[‘alex‘, ‘cody‘, ‘rain‘] {‘alex‘: 1, ‘jake‘: 4, ‘rain‘: 3} {1, 2, 3, 4} [‘alex‘, ‘cody‘, ‘rain‘] {‘alex‘: 1, ‘jake‘: 4, ‘rain‘: 3} {1, 2, 3, 4}
因為全局變量中的列表、集合、字典有一個內存地址,裏面的元素有各自有一個內存地址,在調用這個變量的時候,整體的內存地址不能被修改,但是裏面各元素的內存地址可以被修改
元組本身不可以被修改,但是元組內如果包含列表、集合、字典,那這些列表、集合、字典可以被修改
4、字符串、數字、布爾不能被直接,列表、集合、字典可以被修改,元組看情況
Python3——局部變量和全局變量