2016-02-25 65 views
0

可以說我有以下的配置文件:Python的動態導入和改變一個變量

config.py

x = 2 
y = x * 2 

我想文件main.py在導入此 ,最好使用load_source命令,但我也希望能夠在導入時更改x的值,以便x中的更改傳播到config.py中的其他變量。例如,我想下面的代碼,打印6,而不是4

main.py

import imp 
config = imp.load_source('', 'config.py') 
config.x = 3 
print config.y 

什麼是做到這一點的最好方法是什麼?我知道我可以編寫config.py中的函數來爲我做這件事,但我更喜歡配置只是簡單的變量定義。

+0

爲什麼不直接導入配置和操作變量這樣。無論哪種方式,他們是全球性的 –

+0

即使你導入它,當你改變x時y的值不會改變,因爲它定義在x之後,並且x的改變不會改變y,除非它被定義爲一個列表或者其他東西 – Amin

+0

這不是那麼有效。當你說y = x * 2不是指針時,Python使用動態轉換。即使在腳本中,如果您打印(y),則定義y,然後設置x = 1並再次打印(y),y的意義相同。你可以讓y成爲一個函數,或者像布倫特所建議的那樣在config中創建一個類。 –

回答

1

把代碼放到一個類:

class Config(object): 
    def __init__(self, x=2): 
     self.x = x 
     self.y = x * 2 

然後,在你的主程序:

c = Config(3) 
print c.y 
+0

我希望自己能夠脫身而不需要定義類或函數,但是可以的,謝謝。 – Amin