2013-04-23 42 views
1

全局變量我想修改一個全局變量的一個函數在Python 2.7更改在Python

x = 0 
def func(): 
    global x 
    x = 2 

如果我加載在解釋這段代碼,然後運行FUNC(),X保持爲0怎麼辦我修改函數內x的值?

編輯:這裏是解釋器和源代碼的截圖。我不知道爲什麼它適用於其他人,而不是我。 http://img18.imageshack.us/img18/9567/screenshotfrom201304222.png

+7

這適用於我。你確定你已經調用過這個函數嗎?我粘貼你的代碼,調用'func()'和'print x'。我得到2. – bbayles 2013-04-23 02:35:37

+0

你在說什麼?它仍然有效。 – xxmbabanexx 2013-04-23 02:35:48

+0

你可以嘗試在'func()'中打印所有的'globals()'來查看是否包含'x'。 – 2013-04-23 04:39:14

回答

1

這是一個非常有趣的情況。當我從一個解釋器from mytest import *跑到你的代碼中,我遇到了同樣的問題:

>>> from mytest import * 
>>> x 
0 
>>> func() 
>>> x 
0 

然而,當我只是做了import mytest,並從那裏運行它:

>>> import mytest 
>>> mytest.x 
0 
>>> mytest.func() 
>>> mytest.x 
2 

原來罰款!究其原因,筆者認爲,來自一個線http://docs.python.org/2/reference/simple_stmts.html#the-global-statement

在全局聲明中列出的名字不能被定義爲正式 參數或在for循環的控制目標,類定義,功能 定義,或進口聲明。

看起來像是因爲它是導入語句中的一個參數(通過全部導入),global有問題。你需要import *,還是你可以簡單地導入模塊?