代码之家  ›  专栏  ›  技术社区  ›  rawwar

当使用赋值运算符时,全局作用域中的变量在函数内部不可访问

  •  0
  • rawwar  · 技术社区  · 5 年前

    我有以下代码

    data = 10
    def func():
        print data
        data += 1
        print data
    

    这里,代码失败,出现以下错误

    UnboundLocalError: local variable 'data' referenced before assignment
    

    我读过 this 发布并理解我的代码正在创建一个名为data的局部变量,因此,它并没有试图在全局范围内查找。但是,我试图在作业前打印数据。那么,为什么在分配之前无法访问数据呢?

    注意:我知道如果我使用全局关键字,变量将是可访问的。我的问题是,为什么在分配操作之前无法访问它。因为,只有在赋值时,它才会在局部范围内创建变量。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Vaibhav Jadhav    5 年前

    当您运行以下代码时:

    data = 10
    def func():
        print(data)
    func()
    

    您将得到以下输出:

    10
    

    但是,如果您尝试运行以下代码:

    data = 10
    def func():
        print(data)
        data += 1
        print(data)
    

    它将给出一个错误:

    UnboundLocalError: local variable 'data' referenced before assignment
    

    原因是:

    我们正试图为外部作用域中的变量赋值。

    在函数内部,变量不能既是局部变量又是全局变量。因此Python决定我们需要一个局部变量,因为赋值给 data 内部 func() ,所以定义前的第一个打印语句 数据 抛出上面的错误消息。在函数内部更改或创建的任何变量,如果没有声明为 global 变量。为了告诉Python,我们想使用全局变量,我们必须使用关键字显式地声明这一点 全球的

    要更改全局变量的值,请使用 全球的 变量。

    d = 10
    def func():
        global data
        data +=1
        print(data)
    
    func()