局部变量,全局变量,作用域
全局变量,局部变量 ,作用域
- 全局变量
定义在函数外部一级代码的变量,叫全局变量 - 局部变量
在函数里面定义的变量,叫局部变量,只能在函数内部使用,如果全局变量跟局部变量名一样,优先使用函数局部的变量 - 作用域
分为:
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]