局部变量不能在全局作用域内使用,很多人都知道。但以下两点,很多人经常会遗忘。
1.局部作用域不能使用其他局部作用域内的变量
def spam():
eggs=0
bacon()
print(eggs)
def bacon():
eggs=1
spam()
运行结果是0还是1呢?
spam函数中bacon函数被调用后,局部作用域随即被销毁,不会改变spam函数中eggs的值,故运行结果为0.
2.局部作用域内有局部变量的赋值语句,同名全局变量将不会被使用
def spam():
print(eggs)
eggs=0
eggs=1
spam()
运行程序,将会产生出错信息。
Traceback (most recent call last):
File "E:/PycharmProjects/Python/practice/if_while.py", line 6, in <module>
spam()
File "E:/PycharmProjects/Python/practice/if_while.py", line 3, in spam
print(eggs)
UnboundLocalError: local variable 'eggs' referenced before assignment
出错是因为,spam()函数中有针对eggs的赋值语句,Python将认为eggs是局部变量,但print(eggs)的执行在eggs赋值之前,局部变量并不存在。Python不会退回到使用全局eggs变量。
网友评论