Python全局变量

14 投票
6 回答
36176 浏览
提问于 2025-04-16 15:01
def say_boo_twice():
  global boo
  boo = 'Boo!'
  print boo, boo

boo = 'boo boo'
say_boo_twice()

输出结果是

Boo! Boo!

这和我预想的结果不一样。因为我把 boo 声明为全局变量,为什么输出不是:

boo boo boo boo

6 个回答

5

你在把boo声明为全局变量之后又重新给它赋值,所以它的值就是你最后一次给它设置的那个。如果你把第三行去掉,你就会得到你想要的输出。

18

因为你在之前就重新赋值了。把 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
29

你在函数里改了boo,那它为什么不变呢?另外,全局变量不好用。

撰写回答