


今天的基础篇内容讲解变量的作用域的基本知识,大家这么聪明,一看就会了。
1. 变量的作用域:Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了哪一部分程序可以访问哪个变量,Python的作用域一共有4种: 1. 局部作用域(Local)、2. 嵌套作用域(Enclosing):内层函数的外层函数中、3. 全局作用域(Global)、4. 内建作用域(Built-in)。
查找规则:在局部找不到,便会去局部外的局部找(嵌套作用域),再找不到就会去全局找,再者去内建中找。
代码示例:
# 该案例演示了变量的作用域a = int(1.8) # 内建作用域(Built-in) (Python本身提供的,在所有位置都可以访问)b = 0.2 # 全局作用域(Global)def outer():c = 1.1 # 嵌套作用域(Enclosing)def inner():d = 2.3 #局部作用域(Local)print(d,c,b,a)return innerin_func=outer()in_func()

1.1 全局变量与局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
代码示例:
# 该案例演示了全局变量和局部变量sum = 0 # 全局变量def add(num1,num2) :sum = num1 + num2 # 局部变量print("函数内局部变量的值:",sum)return sumprint(num1) # num1访问不到print("函数外全局变量:",sum,id(sum))
1.2 global关键字
使用global声明全局变量后,可以修改全局变量。对于不可变数据:必须使用global关键字;对于可变数据:不需要使用global关键字也可以修改。
代码示例:
# 不可变类型,必须使用global关键字var1 = 100def function_a():global var1var1 = 200print("var1:", var1)print(var1) # 100function_a() # var1: 200print(var1) # 200# 可变类型数据:不需要使用global关键字也可以修改list1 = [1,5,9]def function_a():list1[0] = -1000print("list1:", list1)print(list1) # [1, 5, 9]function_a() # list1: [-1000, 5, 9]print(list1) # [-1000, 5, 9]
1.3 nonlocal关键字
nonlocal关键字也用于内部作用域修改外部作用域的变量的场景,不过此时外部作用域不是全局作用域而是嵌套作用域,就是外层函数(闭包)。
代码示例:
def function_outer():var1 = 100def function_inner():nonlocal var1var1 = 200function_inner()print(var1)function_outer() # var1: 200



总结:今日我们学习了Python基础篇-变量的作用域:通过学习变量的作用域,我们认识了Python中的4种作用域类型,明确了作用域的查找规则,也学习了global和nonlocal的使用方法及其场景。在Python基础篇,后续我们将持续学习Python基础知识,祝每一位study er学习愉快。




