2011-04-03 103 views
12
def say_boo_twice(): 
    global boo 
    boo = 'Boo!' 
    print boo, boo 

boo = 'boo boo' 
say_boo_twice() 

输出是Python的全局变量

嘘!嘘!

不符合我的预期。自从我宣布boo全球,为什么不输出:

布布布布

+3

全局变量是可怕的。 – intuited 2011-04-03 22:28:21

+1

这是预期的输出。你指定boo,然后你打印两次。 – 2014-05-22 02:15:09

+0

这是一个令人困惑的例子。为什么不改变这些数值而不是为“boo boo”“说两遍”?浑思。 – dcsan 2017-07-08 21:29:35

回答

24

你已经改变boo你的函数里面,为什么不改变它?而且,全局变量很糟糕。

+8

+1提到全球定义管理的恐怖。 – Kayla 2011-04-03 22:16:23

+0

谢谢。我知道了。 – 2011-04-03 22:19:09

+2

而不是使用全局变量,有什么更好的方法来处理跨功能使用的变量? – 2012-07-24 15:19:36

5

将声明为全局声明后,您正在重新分配boo,因此该值是您分配给它的最后一个值。如果你删除了第三行,你会得到你期望的输出。

17

因为您事先重新分配。注释掉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 
3

当你调用该函数本质上重新分配嘘声。

检查如何使用globals()和locals()函数。

0

之前给我希望你能理解在python全局和局部变量之间的区别为例

全局变量:这是专门针对当前模块

局部变量:这是专门针对当前函数或方法,因为我们称之为python

如果本地变量和当前变量都具有相同的名称boo会怎么样?

在这种情况下,如果你不相同的方法定义变嘘声为全球或功能默认情况下将使用它作为局部变量

来到你的代码

您已经在您的方法中将boo定义为全局say_boo_twice()。 当你尝试初始化的时候,这个问题是boo ='Boo!“在该方法中,你实际上是覆盖你的嘘=先前初始化‘布布’

试试这个代码

- 我还没有初始化方法里面变量嘘say_boo_twice()

def say_boo_twice():  
    global boo 
    print boo, boo 

boo = 'boo boo'  
say_boo_twice() 

所有最好的! ! !

0

全局boo仅在全局内部方法say_boo_twice中并且已在此方法内重新分配了一个值。你需要理解词汇或范围,它可以是全球性的,也可以是你想要的。在这种情况下,就在印刷之前,它被赋予了一个'Boo!'的值。这就是它正确打印的内容。