Python全局变量

Don*_*Lun 13 python variables global global-variables

def say_boo_twice():
  global boo
  boo = 'Boo!'
  print boo, boo

boo = 'boo boo'
say_boo_twice()
Run Code Online (Sandbox Code Playgroud)

输出是

嘘!嘘!

不像我预期的那样.既然我宣布boo为全局,为什么输出不是:

嘘嘘嘘

Dr *_*Kay 25

你已经改变了boo你的功能,为什么它不会改变?此外,全局变量也很糟糕.

  • 而不是使用全局变量,处理跨函数使用的变量的更好方法是什么? (2认同)
  • 为什么“全局”变量不好?@麦凯博士 (2认同)

jon*_*tar 17

因为你事先重新分配.评论出来boo = 'Boo!',你会得到你描述的.

def say_boo_twice():
   global boo
   #boo = 'Boo!'
   print boo, boo  

boo = 'boo boo' 
say_boo_twice() 
Run Code Online (Sandbox Code Playgroud)

global boo也是不必要的,boo已经在全球范围内.这就是global有差别

def say_boo_twice():   
   global boo
   boo = 'Boo!'
   print boo, boo  

say_boo_twice() 
print "outside the function: " + boo #works
Run Code Online (Sandbox Code Playgroud)

鉴于:

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
Run Code Online (Sandbox Code Playgroud)


jos*_*nix 5

在将其声明为全局后,您将重新分配boo,因此该值是您为其分配的最后一个值.如果删除第三行,您将获得预期的输出.