2016-02-25 122 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