我是python的新手,对某些行为感到困惑。
我有一个名为d
的目录。在这个目录中,我有两个文件:
__init__.py
:
from d import *
和
d.py
:
var = None
def printVar():
global var
print "from d: var=%s" % `var`
从d
上面的目录中,我在python中进行了这种交互:
>>> import d
>>> d.var = 5
>>> d.printVar()
from d: var=None
为什么var
从d.py
的角度来看没有改变?
我的真正目标是完成以下任务:
__init__.py
小d.py
- 全局变量如果它有所不同,我的包目录中有多个文件,将这些文件合并到一个文件中是不太理想的。
这样做的可行方法是什么?
答案 0 :(得分:2)
当你说:
import d
您正在导入包,而不是模块。
只需导入包中的模块d:
>>> from d import d
>>> d.var = 5
>>> d.printVar()
from d: var=5
答案 1 :(得分:0)
我认为全局var
的实际名称应为d.d.var
(因为它位于包d
中的模块d
中)
所以你可以
1)设置时只需将其称为d.d.var
2)在d.py
不幸的是,这些可能无效:
a)将其复制到d.var
并尝试将其设置在那里(你的问题中有什么) - 这是一个不同的变量
a)将其导入回from __init__ import var
(递归导入)
答案 2 :(得分:0)
from X import *
将X中的所有名称复制到本地模块中。因此,修改本地模块不会修改原始模块。
至于你真正想做什么,你可以使用一些python hackery并用你自己的一个替换模块对象,这会重载分配属性的操作。但不要这样做。这需要大量的代码,让你看起来很奇怪。
我建议使用foo客户端代码可以调用的函数。