假设你有3个模块,a.py,b.py和c.py:
a.py:
v1 = 1
v2 = 2
etc.
b.py:
from a import *
c.py:
from a import *
v1 = 0
将c.py变化V1在a.py和b.py? 如果没有,有没有办法做到这一点?
假设你有3个模块,a.py,b.py和c.py:
a.py:
v1 = 1
v2 = 2
etc.
b.py:
from a import *
c.py:
from a import *
v1 = 0
将c.py变化V1在a.py和b.py? 如果没有,有没有办法做到这一点?
所有这一切如下语句:
v1 = 0
所能做的就是名字绑定v1
对象0
。 它可以在不影响其他模块。
如果我用陌生的名词出现了,我想我大概是,我强烈建议你阅读弗雷德里克Lundh的优秀文章的Python对象:重置你的大脑 。
在from ... import *
的形式基本上是用于在提示符的解释得心应手交互使用:你会被建议在其他情况下从来没有使用它,因为它会给你什么,但问题。
事实上,内部风格指南,在我的雇主更进一步,建议总是导入模块,从模块中从来没有的内容(从内包装是OK,实际上推荐的模块)。 其结果是,在我们的代码库,进口的东西引用总是限定名( themod.thething
)永不barenames(这始终是指内置的,这同一个模块的全局,或本地人); 这使得代码更清晰,更易读,而且避免各种细微的异常。
当然,如果一个模块的名称太长,一个as
在进口条款,给它的输入模块的目的较短和更加便利的别名,是好的。 但是,与一个字母的模块名称,将不再需要;-)。
所以,如果你遵循的方针,始终(从里面,而不是东西)导入模块, c.v1
永远是指同样的事情a.v1
和b.v1
,无论是用于获取和设置:这里有一个潜在的细微的异常避免了蝙蝠的权利 - !)
记住Python中的禅的最后位(不import this
在解释器的提示,看到这一切):
Namespaces are one honking great idea -- let's do more of those!
导入整个模块(而不是从内它的点点滴滴)保留其作为一个命名空间完整,并请合格(点)名称指的是进口的模块里面的东西。 这是一个鸣喇叭伟大的想法:做更多的是 - )!
是的,你只需要正确地访问它(和不使用进口*,它的邪恶)
c.py:
import a
print a.v1 # prints 1
a.v1 = 0
print a.v1 # prints 0