美文网首页
Python中局部变量易错的作用域

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

作者: 只言片语谁知 | 来源:发表于2020-03-07 17:08 被阅读0次

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

    相关文章

      网友评论

          本文标题:Python中局部变量易错的作用域

          本文链接:https://www.haomeiwen.com/subject/plzzlhtx.html