函数优先于其范围内的变量而不是在其范围之外声明的变量?

时间:2015-02-14 15:13:22

标签: python function variables global

我正在尝试访问在函数外部声明的变量。然后每当我更改函数内部的变量值时,我都会看到一条错误消息......

  

UnboundLocalError:在赋值之前引用的局部变量'x'

这是模块......

x = 5

def fun():
    print 'x is', x
    x = 10
    print 'x is now changed to', x

fun()

似乎Python假设函数内部声明的x与函数外部声明的x不同。此外,当我在第5行注释时,程序运行没有错误。

这与Python函数之类的任何规则相关的任何内容都会优先考虑其中声明的变量,如果我想做这样的程序,那么我必须使用global语句来实现目标吗?

答案:好的我觉得我理所当然。感谢@unixer为我提供了链接 - Python documentation on the topic。实际上,当我们在任何范围内声明变量时,变量变为该特定范围的本地变量,并且它会在其范围之外隐藏任何类似命名的变量,除非该变量在本地或外部范围内获得另一个新赋值。就我而言......

  1. 当我第一次在函数外部为x赋值时,x成为该特定范围的局部变量。
  2. 然后当我在函数外部范围内声明的函数x编译器打印值fun内部获取x的值时。
  3. 当我为x(第5行)分配新值时,编译器再次为x分配了新值。但是这次它认为我犯了一个错误,因为我在为它分配值之前尝试打印x(第4行)。
  4. 第3点与......相同。

    print 'x is', x
    x = 5
    

    编译器将引发相同的错误,因为我在尝试打印x的值之前会为其分配任何值。

0 个答案:

没有答案