Python中局部变量易错的作用域

局部变量不能在全局作用域内使用,很多人都知道。但以下两点,很多人经常会遗忘。
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 
    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变量。

你可能感兴趣的:(Python中局部变量易错的作用域)