def say_boo_twice():
global boo
boo = 'Boo!'
print boo, boo
boo = 'boo boo'
say_boo_twice()
输出为
嘘!嘘!
不像我想的那样。既然我将boo
声明为全局,为什么输出不是:
boo boo boo boo
你已经改变了boo
在你的功能,为什么它不会改变?此外,全局变量也很糟糕。
因为你在前面重新赋值。注释掉boo = 'Boo!'
,你将得到你所描述的。
def say_boo_twice():
global boo
#boo = 'Boo!'
print boo, boo
boo = 'boo boo'
say_boo_twice()
而且global boo
是不必要的,boo
已经在全局范围内。这就是global
发挥作用的地方
def say_boo_twice():
global boo
boo = 'Boo!'
print boo, boo
say_boo_twice()
print "outside the function: " + boo #works
而:
def say_boo_twice():
#global boo
boo = 'Boo!'
print boo, boo
say_boo_twice()
print "outside the function: " + boo # ERROR. boo is only known inside function, not to this scope
在将boo声明为全局后重新分配boo,因此该值是您分配给它的最后一个值。如果删除第三行,将得到预期的输出。
本质上是在调用函数时重新赋值boo。
检查globals()和locals()函数是如何工作的。
在给出示例之前,我希望您了解python中全局变量和局部变量的区别
全局变量:特定于当前模块
局部变量:这是特定于当前函数或方法的,正如我们在python中所说的
如果本地变量和当前变量有相同的名字boo怎么办?
在这种情况下,如果您没有将变量boo定义为同一方法或函数中的全局,它将默认使用它作为局部变量进入你的代码
您已经在say_boo_twice()方法中将boo定义为全局。当您尝试初始化boo = ' boo !'在这个方法中,你实际上覆盖了你之前初始化的boo = 'boo boo'
试试这个代码
—我没有初始化变量boo在方法say_boo_twice()
def say_boo_twice():
global boo
print boo, boo
boo = 'boo boo'
say_boo_twice()
祝一切顺利!!!!div ! global boo仅在方法say_boo_中是全局的,并且在该方法中被重新赋值了两次。您需要了解词法或范围,它可以是全局的,也可以是您想要的。在这个上下文中,就在打印之前,它被赋值为'Boo!