一、局部变量与全局变量
1. 没有缩进,顶头写的变量为全局变量
2. 在子程序里定义的变量为局部变量
3. 只有函数能把变量私有化
name = 'lhf' #全局变量 def change_name(): name = '大帅比' #局部变量 只在这一段函数里生效 print(name) #先从当前作用域找name,找不到再往外层找 change_name() print(name)
二、修改全局变量
1. global 总是把最外层的全局变量拿来用
NAME = 'lhf' def change_name(): global NAME #声明全局变量,把最外层的全局变量NAME 拿来用 NAME = "dabai" #修改全局变量 print(NAME) print(NAME) change_name()
print(NAME)
2. 如果函数内部变量前无 global 关键字,优先读取局部变量,无局部变量再读取全局变量
对于可变变量,可以对内部元素进行操作,但无法对变量本身重新赋值 name = ' fff '
- 有声明局部变量
NAME = [1, 2] def test(): NAME = '自己' #又新定义了一个局部变量 print('我爱', NAME) test() print(NAME)
- 无声明局部变量
NAME = [1, 2] def test(): NAME.append('你') #对可变的全局变量进行内部修改 print('我爱', NAME[2]) test() print(NAME)
- 有global 且声明了局部变量
NAME = [1, 2] def test(): global NAME NAME = '自己' print('我爱',NAME) test() print(NAME)
错误示例:函数内既有局部变量,又有全局变量,名字重复,所以调用失败
NAME = [1, 2] def test(): NAME = '自己' global NAME print('我爱',NAME) test() print(NAME)
所以 我们把全局变量的变量名用大写 局部变量的变量名用小写
三、有函数的程序执行顺序
python 的代码从上往下执行,但遇到函数,并不执行,而是只编译,调用函数时才回去执行。
name = '大白' def cuoai(): name = 'liu' def pianai(): global name name = 'wen' pianai() print(name) print(name) cuoai() print(name)
四、nonlocal 指代上一级变量,跟global 用法一样
name = '大白' def cuoai(): name = 'liu' def pianai(): nonlocal name name = 'wen' pianai() print(name) print(name) cuoai() print(name)