2011-07-11 76 views
0

CODE 1內的全局聲明:可變量的函數中使用而沒有該功能

x=4  
def func(): 
      print("HELLO WORLD") 
      y=x+2 
      print (y) 
      print (x) # gives o/p as HELLO WORLD 6,4,4. 

func()  
print (x) 

CODE 2:

x=4  
def func(): 

      print("HELLO WORLD") 
      y=x+2 
      x=x+2 # gives an error here 
      print (y) 
      print (x) 

func() 
print (x) 

在第一代碼,它沒有顯示任何錯誤,它將x值添加到2,並返回y,並將o/p打印爲6,4,4。但實際上,據我所知,它應該指出一個錯誤,因爲我沒有在func()內給出x變量的全局聲明。但它沒有任何錯誤,但在Code 2它給出了一個錯誤,說x referenced before assignment

問題是可以用x將其值賦值給其他變量嗎?即使全球宣言沒有遵循這一規定?

+3

這是蟒蛇,你可以停止使用分號嗎? – Jacob

+0

of course cularis但它給用戶更多的可讀性,如果你使用分號,所以我用它 – niko

+2

以什麼方式分號增加可讀性?在你的代碼中沒有用。 – Jacob

回答

3

您可以閱讀全局變量,不會明確聲明他們作爲全球(代碼1)

但你不能分配到一個全局變量沒有明確地聲明爲全局的。 (代碼2)

這是因爲在閱讀中沒有任何傷害,但是在分配時可能會得到意想不到的行爲(特別是如果它是一個包含多個變量的長代碼,並且您認爲它是您使用的唯一名稱,但它不是)。

1

在第一個函數中,你還沒有賦值給x,所以編譯器不會把它當作局部變量。運行時將自動從包含範圍中獲取x。您可以輕鬆地檢查X不被認爲是一個局部變量:

>>> func1.__code__.co_varnames 
('y',) 

在你指定x的第2個功能,所以編譯器把它當作一個局部變量:

>>> func2.__code__.co_varnames 
('x', 'y') 

因此,錯誤您看到:UnboundLocalError: local variable 'x' referenced before assignment

+0

你的權利多數民衆贊成在我看到的錯誤 – niko

相關問題