函数-变量作用域
变量的作用域指的是变量的作用范围(标识这个变量在哪里可以使用,在哪儿不可以使用)。
根据变量的作用范围,我们将变量分为两类,一类全局变量,一类局部变量。
全局变量:在函数之外定义的变量,称之为全局变量,在整个文件中(包括函数内)都可以使用,但通常定义在文件的顶部。
局部变量:在函数内部定义的变量,称之为局部变量,只能在该函数内部使用,外部无法访问(函数执行完毕后,会自动销毁其内部局部变量)。
# ------ 函数 - 变量的作用域 ----- # 全局变量 num = 100 # 定义函数 def circle_area(r): # 局部变量 pi = 3.14 area = pi * r * r print("num = ", num) # 全局变量在函数内部也可以访问 return area #print("pi = ", pi) #print("area = ", area) 局部变量不能在函数外 # 调用函数 print("num = ", num) # 全局变量在函数外部 c_area = circle_area(num) print(c_area) c_area2 = circle_area(10) print(c_area2) print("-------------------------------") num = 200 def circle_area(r): pi = 3.14 area = pi * r * r num = 20000 print("num = ", num) # 20000 return area # 调用函数 c_area = circle_area(10) print(c_area) # 314.0 print("num = ", num) # 200D:\py_project_heima\.venv\Scripts\python.exe D:\py_project_heima\第二章\test.py num = 100 num = 100 31400.0 num = 100 314.0 ------------------------------- num = 20000 314.0 num = 200global关键字
global关键字用于明确的告诉Python解释器,在函数中要使用全局变量,使得可以在函数内部修改全局变量的值。
print("------------global-------------") num = 100 def circle_area(r): pi = 3.14 area = pi * r * r global num num = 10000 print("num = ", num) # 10000 return area # 调用函数 c_area = circle_area(10) print(c_area) # 314.0 print("num = ", num) # 10000小结:
1. 在函数内部定义的变量就是局部变量,函数外声明的变量是全局变量。
局部变量只能在该函数内部访问,外部无法访问(从名字也能看出,局部变量只是局部的)。
全局变量可以函数内部访问,也可以在外部访问,但是在函数内部访问这个全局变量,它只能读取、不能进行修改,一旦进行修改、赋值操作,它就会在函数内部再生成一个对应的局部变量。如果说我们想在函数内部想修改这个全局变量的值,我们就需要通过global关键字来声明了,用global关键字声明了后,我们就可以修改操作这个变量的值了。
2. global关键字的作用:在函数内部使用,声明接下来要使用的是全局变量,语法:global ***
3. 注意事项:
- 尽量避免在函数中使用全局变量,因为会使代码难以维护和调试;
- 考虑使用函数参数和返回值来传递数据,而不是依赖全局变量;
- global主要用在程序的状态、配置和计数器等场景中。
global场景示范
print("------------global场景示范-------------") # 调试开关 debug_mode = False def enable_debug_mode(): global debug_mode debug_mode = True print("调试模式已开启") def disable_debug_mode(): global debug_mode debug_mode = False print("调试模式已关闭")通过这个全局变量,记录的是程序当中的调试状态,在调用这个函数时,就来改这个调试状态,就需要在函数中操作这个全局变量,此时就可以使用到global来指定我们要操作的是这个全局变量。
再比如程序计数器,我们想记录这个函数调用的次数,可以定义一个全局变量来记录,然后每一次都让这个全局变量进行一个加1操作就可以了,那么也就需要来操作这个全局变量。
声明:本篇学习笔记参考黑马程序员相关课程,部分素材来源于网络公开资料及本人补充;文中为个人整理复盘,仅供学习交流使用。