2013-08-03 44 views

回答

6

只需重新分配變量:

import myfunc 
from myfunc import print_a 

a = 10 

print a 

myfunc.a = a 

print_a() 

否則這是不可能的。

Rememeber的方式,從C. 在Python不在那個地方的文件的「複製內容」, 的import完全不同了Python對待模塊,但它在執行代碼給定文件並創建一個module對象。

模塊的全局變量是module對象屬性,可以按照我所示進行修改。除了內置插件外,沒有像「全局變量」這樣的概念。


我建議重構你的代碼,這樣你就不必在所有修改這個全局變量的方式,移動使用myfunc.amain1myfunc代碼。 事實上,你需要這樣的全局變量已經是代碼異味,你的代碼有問題,你應該嘗試修復它。


實際上有一種方法可以影響「全球範圍」,但它是如此駭人,我甚至不想提及它。相信我:你不想使用它。如果人們使用這種黑客來看你的代碼,你可能會面臨身體危險。

+3

+1 「人身危險」。 – Matthias

+0

但是OP想要使用'main1'中的'a'變量,而不是僅僅看到它的副本 –

+0

@RyanHaining你在哪裏看到一個「複製」?在我的示例中,我只是簡單地添加/更改* reference *,它並不意味着複製任何內容,因此對其他模塊中的變量的更改會在asweel中看到,除非對象是不可變的(在這種情況下,您不應該無論如何關心身份)。 – Bakuriu

1

不同於C,在全局範圍內聲明的變量仍然在範圍上創建它們在模塊的限制,所以你需要用它生活在該模塊限定名稱a

global關鍵字時使用你要修改通過重新分配一個全局變量,當你只是引用一個全局變量時你不需要它。

如果您嘗試訪問其他文件的變量,你必須導入模塊,而且由於你的文件是結構化的方式,你有一對夫婦的方式來解決問題:

選項:1)移動myfunc.print_a內部函數和import main1myfunc的參考看到a

MAIN1。PY

import myfunc 

a = 10 

def main(): 
    print a  
    myfunc.print_a() 

if __name__ == '__main__': 
    main() 

myfunc.py

import main1 

def print_a(): 
    print main1.a 

選項2)建議移動變量(多個)到另一個模塊並同時具有myfuncmain1進口它

vals.py

a = 20 

main1.py

import vals 
from myfunc import print_a 

vals.a = 10 

print vals.a  
print_a() 

myfunc.py

import vals 

def print_a(): 
    print vals.a