为什么Python允许您在函数内部将局部变量实例化为全局变量?

Ste*_*art 2 python scope global-variables

为什么在Python下面的工作,没有宣布一个在全球范围内第一个?

def setA():
   global a 
   a = 5

def printA():
    print a

setA()
printA()
Run Code Online (Sandbox Code Playgroud)

在我看来,这是正确的方法:

a = None

def setA():
   global a 
   a = 5

def printA():
    print a

setA()
printA()
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 8

基本上是出于a = 5创建新局部变量的相同原因:当您分配给变量时,Python并不关心它是否已经存在.该global声明仅表示"此范围内以下名称的任何使用现在都被视为在全球范围内运作".

您可以a = 5在模块顶层执行是否a已存在.所以你可以global a; a = 5在一个函数内部做. global使函数内部的赋值与全局级别的赋值一样,包括名称是否已存在无关紧要.