今天使用python写一段小程序时发现了一个容易忽略掉的变量作用域的细节。先看一下问题。

$ cat main_variable.py
x = 1

if __name__ == "__main__":
    global x
    x = 2

$ python main_area.py
main_area.py:4: SyntaxWarning: name 'x' is assigned to before global declaration
  global x

程序的本来目的是在对全局变量前使用global进行声明,但却引发了SyntaxWarning异常。问题原因其实也很简单,因为虽然使用’if name == “main”‘进行判断后再执行,但代码还是处于整个文件的作用域中,因此并不需要使用global进行声明。

因此程序可以有下面两种改法:

  • 方法1:
$ cat main_variable.py
x = 1

if __name__ == "__main__":
    x = 2

$ python main_area.py
  • 方法2:
$ cat main_variable.py
x = 1

def main():
    global x
    x = 2

if __name__ == "__main__":
    main()

$ python main_area.py

写程序一定要注意细节啊!