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 <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变量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容