全局变量和局部变量:
局部变量:
1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
2. 局部变量只能在函数内部使用
3. 局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
全局变量:
定义在函数外部, 模块内部的变量称为全局变量
全局变量, 所有函数都可以直接访问(但函数内部不能直接修改全局变量的绑定关系)
示例:
a = 100
b = 200
def fn(c):
d = 300
print(a, b, c, d)
fn(300)
print("a = ", a)
print("b = ", b)
局部变量说明:
1. 在函数内首次对变量赋值是创建局部变量, 再次为变量赋值是修改局部变量的
绑定关系
2. 在函数内部的赋值语句不会对全局变量造成影响
python作用域概念:
作用域也叫命名空间, 是访问变量时查找变量名的范围空间
python的四个作用域LEGB
作用域: 英文解释 英文简写
局部作用域:(函数内) Local(function) L
外部嵌套函数作用域 Enclosing funciton locals E
函数定义所在模块的作用域 Global(module) G
python 内置模块的作用域 Builtin(python) B
一般用函数来封装变量
示例见:
namespace.py
local
enclosing function locals
Builtin
global
enclosing function locals
local
变量名的查找规则(查找顺序):
1. 查找本地变量
2. 查找包裹此函数的外部嵌套函数内部的变量
3. 全局变量
4. 内置变量
globals() / locals()函数
globals()返回全局作用域内变量的字典
locals() 返回局部作用域内变脸的字典
示例:
练习:
写一个函数mysum 此函数的功能是返回:
1 + 2 + 3 + 4 + 5 + 6........n的和
def mysum(n)
print(mysum(100)) 5050
示例见:mysum.py
2. 写一个函数,mysum2
此函数可以传入一个参数, 两个参数和三个参数:
1. 当传入一个参数时, 这个参数代表终止数
2. 当传入两个参数时, 第一个参数代表起始值,第二个参数代表终止值
3. 当传入三个参数时, 第三个参数代表步长
此函数的功能是返回从开始到终止值的和
如:
print(mysum2(5)) #10 (0 + 1 + 2 + 3 + 4 + 5)
print(mysum2(4, 6)) # 9 (4 +5)
print(mysum2(5, 10, 2)) # 21 5 + 7 + 9
global 语句:
作用:
1.告诉解释器,global 语句声明的一个或多个变量, 这些变量的作用域
为模块级的作用域的变量, 也称作为全局变量
2. 全局声明(global)
将赋值变量映射到模块文件内部的作用域
语法:
global 变量1, 变量2,.....
示例:
global ga, gb
global gc
global 声明示例见:
global_statement.py
说明;
1. 全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
2. 全局变量在函数内部不经过声明就可以直接访问
3. 不能先声明局部变量,再用global声明为全局变量,此做法不符合规则
4. global变量列表里的变量名不能出现在此作用域内的形参列表里
nonlocal语句:
作用:
告诉解释器, nonloca 声明的变量不是局部变量,也不是全局变量
变量, 而是外部嵌套函数内的变量
语法:
nonlocal 变量名1, 变量名2, ....
示例:
nonlocal_statement.py
说明:
1. nonlocal语句只能在被嵌套函数内部进行使用
2. 访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
3. 当有两层或两层以上函数嵌套时, 访问nonlocal变量只对最近一层
变量进行操作
4. nonlocal语句的变量列表的变量名不能出现在此函数的参数列表中
说明3 示例:
def f1():
v= 100
def f2():
v= 200
def