Python全局变量


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!

相关内容

  • 没有找到相关文章

最新更新