def test():
print(apple)
apple = 'apple'
apple = 'global apple'
test()
运行这个程序会报错,因为apple虽然在apple = 'global apple'语句中,定义为全局变量,但是由于在test函数中,有一个apple的局部变量,即使在该局部变量的赋值语句在print之后,python也会在print执行前,看到局部变量apple,结果python就认为在test中,apple是局部变量,而在 print(apple)的执行在 apple 赋值之前,局部变量 apple 并不存在,所以就会报如下错误:
UnboundLocalError: local variable 'apple' referenced before assignment
也就是说test函数中使用了局部变量apple,不管有没有运行到apple的赋值语句,都会屏蔽掉全局变量
def test():
global apple
apple = 'apple'
print(apple)
test()
运行这个程序也会报错,错误信息如下:
NameError: name 'apple' is not defined
也就是说print中的apple没有定义,但是如果把test和print函数调换一下位置,就可以正常运行了,因为在test函数的开始处,有针对 apple变量的 global 语句,也就相当于test中定义了apple,所以在函数中定义的全局变量,只有在该函数运行结束,才是有效的,运行后全局可用,运行前python看不到这个全局变量