美文网首页
Python局部变量和全局变量的坑

Python局部变量和全局变量的坑

作者: BenjaminY | 来源:发表于2019-03-07 11:48 被阅读0次

PyCharm编译不报错,但运行报错,可能是编译器认为while True可能不会进入,所以编译不报错

use_width = 400
def write():
    # global use_width
    while True:
        a = use_width
        use_width =100
        print(a)
        print(use_width)
write()

编译器报错,错误与以上代码相同:UnboundLocalError: local variable 'use_width' referenced before assignment

use_width = 400
def write():
    # global use_width
    a = use_width
    use_width =100
    print(a)
    print(use_width)
write()

编译运行均不报错:

use_width = 400
def write():
    # global use_width
    a = use_width
    print(a)
    print(use_width)
write()
---
C:\Users\hy\PycharmProjects\LoadVideo\venv\Scripts\python.exe C:/Users/hy/PycharmProjects/LoadVideo/test.py
400
400

Process finished with exit code 0

总结:

  1. 如果使用global关键字声明变量为全局变量,则直接使用全局变量进行读取和写入,无歧义
  2. 如果没有global关键字对全局变量的声明,则分2种情况:
    a.如果函数体内没有对全局变量名赋值操作,则直接读取全局变量值使用,没有问题
    b.如果函数体内有对全局变量名的赋值操作,则编译器会认为赋值处定义了局部变量,并且绑定此变量名到此局部变量,并影响整个函数体内的相同变量名。这样一来,如果在赋值操作前进行了全局变量名使用则会报错“UnboundLocalError: local variable 'use_width' referenced before assignment”。解决:此时必须将赋值操作放在函数内此变量使用前,或者在函数开头使用global引入全局变量来进行读取使用,具体操作根据实际业务逻辑需求确定。

相关文章

  • python

    函数内全局变量赋值 Python中有局部变量和全局变量,当局部变量名字和全局变量名字重复时,局部变量会覆盖掉全局变...

  • python 局部变量和全局变量使用 2021-11-05

    python 局部变量和全局变量使用 a = 666 def modify_a():global aa = 20...

  • Python局部变量和全局变量的坑

    PyCharm编译不报错,但运行报错,可能是编译器认为while True可能不会进入,所以编译不报错。 编译器报...

  • python变量区域的一个坑

    python有两种变量,全局变量和局部变量。 全局变量的scope是整个module,局部变量是函数或者class...

  • Python学习-全局变量和局部变量

    在函数中定义的变量称为局部变量在函数外定义的变量称为全局变量 在学习Python的时候发现变量访问有些坑,记录如下...

  • Swift-全局变量、局部变量以及类型属性

    全局变量和局部变量 全局变量和局部变量 计算属性和属性观察器所描述的功能也可以用于全局变量和局部变量。全局变量是在...

  • C语言特性(局部变量和全局变量)

    局部变量和全局变量 局部变量 局部变量根据定义形式的不同,又分为如下三种。 全局变量 在一个函数内部,如果全局变量...

  • 15 C变量的作用域

    1、局部变量和全局变量

  • python基础

    1.局部变量、全局变量 在函数内部修改全局变量时局部变量会创建一个和全局变量一样名称的局部变量,在更改的时候只会更...

  • 类,变量,迭代器

    1、变量 python中实际有4种变量,分别是全局变量,类变量,实例变量,局部变量。 - 全局变量:类之外的变量,...

网友评论

      本文标题:Python局部变量和全局变量的坑

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