2016-11-09 62 views
0

我有一個簡單的Python模塊文件First.py更改值

a = 50 
b = [100,200,300] 

我嘗試這個模塊導入到另一個文件Test.py

import First 
First.a = 420 
First.b[0] = 420 
print (First.a) 

我的目的是要改變列表值在第一個模塊中。

一旦腳本Test.py完成時,我打印模塊內的值,我發現值沒有改變。

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (I 
tel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import First 
>>> dir(First) 
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__spec__', 'a', 'b'] 
>>> First.a 
50 
>>> First.b 
[100, 200, 300] 

我在這裏錯過了什麼?有人可以引導我嗎?

+0

的任何變化都在運行時,它們不會在會話之間持續。模塊的文本沒有改變。 – AChampion

回答

1

一旦腳本Test.py完成時,我打印模塊內的值,我發現值沒有改變。

如果執行python Test.py然後交互發射了你的解釋,並檢查了值,當然,修改將不可見。 Python找到First.py後,找到import,執行它並初始化ab,其值爲First.py;以前的執行不會影響這一點。

如果您導入您的交互式解釋Test然後進口First變化將反映:

Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import Test 
420 
>>> import First 
>>> First.a 
420 
>>> First.b 
[420, 200, 300] 

期間Test進口,First被加載並執行,那麼它的值修改。當您重新導入Python會只是看在導入模塊(sys.modules)一張桌子和不執行其內容返回它(並重新初始化ab

+0

但我不確定我是否遵循100%。根據我的理解,Python不會重新加載並運行一個模塊文件,一旦它已經被加載並且.pyc文件被創建。那麼爲什麼在第一種情況下,模塊代碼會重新運行,最終重新初始化變量,並且代碼不會在第二次運行。在這兩種情況下,模塊已經加載。 –

+0

@SubhayanBhattacharya是的,生成'.pyc'文件,但沒有區別。當你運行(不導入)'Test.py'時,它改變爲'First.py'不是持久的; '.pyc'文件具有*相同的*字節碼指令。當你導入Test時,你也可以導入First,然後改變它的值,但是.pyc在這裏並不真正扮演一個角色:-)。 –