1局部作用域
输入
def v1():
a = 5 #局部变量,只在函数内部使用
print(a)
v1()
print(a) #报错,无法再函数外部访问局部变量
输出
5
Traceback (most recent call last):
File "xxxxxxxxxxxx", line 6, in <module>
print(a)
NameError: name 'a' is not defined
2闭包作用域
def out1():
a = 7 #闭包
def in1():
b = 8 #局部
print(a) #可以输出,闭包作用域的范围大于局部作用域的范围
print(b) #报错,闭包中无法访问局部变量,b的作用域仅仅在4,5两行
in1()
out1()
3全局作用域
输入
age = 12 #全局变量,拥有 全局作用域,可以在任何位置访问到
def person():
name = "tom"
print(name)
print(age) #局部中可以访问全局变量age
person()
输出
tom
12
4系统内建变量的作用域
系统固定模块中的,如print(),可以在任何位置访问
查找规则:LEGB
输入
sum1 = 0
def sum(a,b):
sum1 = a + b
print(sum1,"局部变量") #之所以打印的不是0是因为先从局部中找的
return sum1
sum(4,5.)
print(sum1,"全局变量")
输出
9.0 局部变量
0 全局变量
若想通过全局变量改变全局变量,则可以使用global关键字,例如:
输入
sum1 = 0
def sum(a,b):
global sum1 #让局部使用全局变量而不是重新定义变量
sum1 = a + b #通过局部变量sum1改变全局变量sum1的值
print(sum1,"局部变量")
return sum1
sum(4,5.)
print(sum1,"全局变量")
输出
9.0 局部变量
9.0 全局变量
注意:只有模块,类,和函数才会产生新的作用域