全局變量,局部變量 ,作用域
- 全局變量
定義在函數外部一級代碼的變量,叫全局變量 - 局部變量
在函數里面定義的變量,叫局部變量,只能在函數內部使用,如果全局變量跟局部變量名一樣,優先使用函數局部的變量 - 作用域
分為:
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內建作用域
以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。
在函數內部,可以引用全局變量
name = 'zk' # 全局變量 全局作用域
def change():
name = '小黃' # 在函數里面是局部變量 局部作用域
print(id(name))
print(name)
change()
print(name,id(name))
在函數里修改全局變量
只需要在函數里聲明變量前加 global 變量名
name = 'zk'
def change():
global name
name = '小黃'
print(id(name))
print(name)
change()
print(name,id(name))
在函數里修改列表數據
names = ['zk','cz','hc','th']
def set_names():
# names = ['zk','hc','th']
del names[1] # 全局的元素可以修改
names[1] = 'xiaohan' # 可以修改的有列表,字典等
print(names)
set_names()
print(names)
# 輸出
['zk', 'xiaohan', 'th']
['zk', 'xiaohan', 'th']
如果要全部修改,就要global
names = ['zk','cz','hc','th']
def set_names():
global names
names = [1,2,3,4]
del names[1]
names[1] = 'xiaohan'
print(names)
set_names()
print(names)
輸出
[1, 'xiaohan', 4]
[1, 'xiaohan', 4]