全局变量:
特点:
在全局作用域中产生
一般用大写字母表示
在局部作用域中用global关键字时声明
NAME=\'John\' def change_name(): NAME=\'July\' change_name() print(NAME) #\'July\' #在函数局部作用域中找不到变量时,会向上一级作用域找,直到全局作用域
global关键字:
name=\'John\' def test(): name=\'July\' #局部变量name def foo(): global name #用global声明name是全局变量 print(\'from foo:%s\' %name) print(\'from test:%s\' %name) foo() test() #----------------------- \'from test:July\' #在test中,打印的是局部变量name
\'from foo:John\' #在foo中,打印的是全局变量name
注意:局部作用域中的全局变量不可在声明之前使用,否则程序报错。
在局部作用域中可对列表、集合等可变类型数据进行修改:
l=[1,2,3,4] def foo(): l.pop() foo() print(l) #--------------- [1, 2, 3]
局部变量:
特点:
在局部作用域产生
仅限于该局部作用域或其下级作用域中引用
name=\'July\' def name() name=\'John\' print(name) #\'July\'
上一级变量:
特点:
用nonlocal关键字进行声明,若上一级作用域没有找到该变量则报错。
def te(): name="aa" def test(): nonlocal name #nonlocal关键字声明上一级变量 name=\'changed\' #对上一级变量进行赋值 test() print(name) #\'changed\'