Python 变量 作用域 是 变量的 使用范围 , 变量 在哪些 代码区域中可以被访问 , 在哪些代码块中不能被访问 ;
变量主要分为两类 :
局部变量 指的是 定义在 函数中的变量 , 只在 函数 内部可访问 , 函数 外部无法访问 函数中的局部变量 ;
局部变量的作用是 在 函数运行时 , 临时保存 临时变量 数据 , 函数运行结束 , 局部变量会被销毁 ;
错误代码示例 : 在该代码中的 add 函数中定义了局部变量 sum_num , 该 局部变量 只能在函数内部访问 , 如果在函数外部访问时 , 编译时会报错 Unresolved reference 'sum_num'
, 运行时会报错 NameError: name 'sum_num' is not defined
;
"""
局部变量 代码示例
"""
# 定义函数 以及 局部变量
def add(a, b):
# sum_num 是局部变量, 只能在函数内部访问
sum_num = a + b
print(sum_num)
# 调用函数
add(1, 2) # 输出: 3
# 尝试调用 函数内部的 局部变量
print(sum_num) # 报错: NameError: name 'sum_num' is not defined
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
3
Traceback (most recent call last):
File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 12, in <module>
print(sum_num)
NameError: name 'sum_num' is not defined
Process finished with exit code 1
报错 :
NameError: name 'sum_num' is not defined
全局变量 是 在 函数体 外部 定义的变量 , 该变量 可以在 函数体 内部 和 外部 同时生效 ;
在 函数体 外部 使用全局变量 , 直接使用即可 ;
全局变量 可以在 函数体内部访问 , 只能读取 , 不能修改 ;
如果 要在 函数体 内部使用全局变量 , 如果要修改 全局变量的值 , 需要使用 global
关键字提前声明 , 否则就会将变量当做新定义的内部变量 ;
在下面的代码中 , 定义了全局变量 sum_num ,
如果要在 add 函数中 , 读取该全局变量 , 可以直接读取 ;
但是如果要修改改全局变量 , 直接使用 sum_num = a + b
代码 重新为 全局变量赋值 , 该操作相当于在 函数中 重新定义了一个新的局部变量 , 在函数执行完毕后 就会销毁 , 该 局部变量 sum_num 与 全局变量 sum_num 没有任何关系 ;
因此 , 最后打印出来的 全局变量 sum_num 值仍为 0 ;
代码示例 :
"""
全局变量 代码示例
"""
# 定义全局变量
sum_num = 0
# 定义函数 以及 尝试使用全局变量
def add(a, b):
# 此处的 sum_num 是局部变量
sum_num = a + b
# 输出局部变量
print(sum_num)
# 调用函数
add(1, 2) # 输出: 3
# 尝试调用 函数内部的 局部变量
print(sum_num) # 输出: 0
执行结果 :
3
0
在下面的代码中 , 如果要修改改全局变量 , 不能直接使用 sum_num = a + b
代码 , 需要先使用 global sum_num
代码 , 声明一下下面将要使用全局变量 sum_num , 此时编译器就会将该变量当做全局变量进行处理 ;
最后打印出来的 全局变量 sum_num 值 为 3 ;
代码示例 :
"""
全局变量 代码示例
"""
# 定义全局变量
sum_num = 0
# 定义函数 以及 尝试使用全局变量
def add(a, b):
# 此处的 sum_num 是全局变量
global sum_num
sum_num = a + b
# 输出全局遍变量
print(sum_num)
# 调用函数
add(1, 2) # 输出: 3
# 输出全局变量
print(sum_num) # 输出: 3
执行结果 :
3
3