python-变量-作用域

梳理一下python变量作用域范围

块级作用域

python没有块级作用域

1
2
3
4
5
6
7
if 1 == 1:
name = "Layne"
print name # 输出 Layne
for i in range(10):
age = i
print age # 输出 9

这是因为在Python中是没有块级作用域的,代码块里的变量,外部可以调用,所以可运行成功

局部作用域

函数是个单独的作用域,Python中没有块级作用域,但是有局部作用域

1
2
3
def func():
name = "Layne" ## name 定义在函数体内
print name # 报错:name 'name' is not defined

运行报错,name变量只在func()函数内部中生效,所以在全局中是没法调用的

作用域链

1
2
3
4
5
6
7
8
name = "Layne"
def f1():
name = "Donell"
def f2():
name = "Kevin"
print(name)
f2()
f1()

f1()执行完会输出Kevin;记住一个概念,Python中有作用域链,变量会由内到外找,先去自己作用域去找,自己没有再去上级去找,直到找不到报错

全局作用域

1
2
3
4
5
6
7
8
9
10
name = "Layne"
def f1():
print(name)
def f2():
name = "Donell"
f1()
f2()

结果输出 Layne。 函数f1()与 name=”Layne” 在一个作用域链函数内部没有变量是会向外找,所以此时变量name值为”Layne”