局部作用域中的变量优先级高于外层作用域的同名变量,如下:
a = 1
def fun_1():
a = 2
def fun_2():
a = 3
def fun_3():
a = 4
print('第四个:%s' % a)
print('第三个:%s' % a)
fun_3()
print('第五个:%s' % a)
print('第二个:%s' % a)
fun_2()
print('第六个:%s' % a)
print('第一个:%s' % a)
fun_1()
print('第七个:%s' % a)
第一个打印语句 print('第一个:%s' % a)
打印的是全局变量a
的值,即1。
- 然后调用函数
fun_1()
,在函数内部定义了一个局部变量a
,其值为2。然后执行print('第二个:%s' % a)
,这里的a
是函数fun_1()
内部的局部变量,打印的是局部变量a
的值,即2。 - 接着调用函数
fun_2()
,在函数内部定义了一个局部变量a
,其值为3。然后执行print('第三个:%s' % a)
,这里的a
是函数fun_2()
内部的局部变量,打印的是局部变量a
的值,即3。 - 进入函数
fun_3()
,在函数内部定义了一个局部变量a
,其值为4。然后执行print('第四个:%s' % a)
,这里的a
是函数fun_3()
内部的局部变量,打印的是局部变量a
的值,即4。 - 回到函数
fun_2()
,继续执行print('第五个:%s' % a)
,这里的a
是函数fun_2()
内部的局部变量,打印的是局部变量a
的值,即3。 - 最后回到函数
fun_1()
,执行print('第六个:%s' % a)
,这里的a
是函数fun_1()
内部的局部变量,打印的是局部变量a
的值,即2。 - 最终在全局作用域中执行
print('第七个:%s' % a)
,打印的是全局变量a
的值,即1。
运行结果:
第一个:1
第二个:2
第三个:3
第四个:4
第五个:3
第六个:2
第七个:1