Python导入:将改变在“父”“子”的变化可变/其他孩子的变量?(Python imports:

2019-09-22 16:22发布

假设你有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? 如果没有,有没有办法做到这一点?

Answer 1:

所有这一切如下语句:

v1 = 0

所能做的就是名字绑定v1对象0 。 它可以在不影响其他模块。

如果我用陌生的名词出现了,我想我大概是,我强烈建议你阅读弗雷德里克Lundh的优秀文章的Python对象:重置你的大脑 。



Answer 2:

from ... import *的形式基本上是用于在提示符的解释得心应手交互使用:你会被建议在其他情况下从来没有使用它,因为它会给你什么,但问题。

事实上,内部风格指南,在我的雇主更进一步,建议总是导入模块,从模块中从来没有的内容(从内包装是OK,实际上推荐的模块)。 其结果是,在我们的代码库,进口的东西引用总是限定名( themod.thething )永不barenames(这始终是指内置的,这同一个模块的全局,或本地人); 这使得代码更清晰,更易读,而且避免各种细微的异常。

当然,如果一个模块的名称太长,一个as在进口条款,给它的输入模块的目的较短和更加便利的别名,是好的。 但是,与一个字母的模块名称,将不再需要;-)。

所以,如果你遵循的方针,始终(从里面,而不是东西)导入模块, c.v1永远是指同样的事情a.v1b.v1 ,无论是用于获取和设置:这里有一个潜在的细微的异常避免了蝙蝠的权利 - !)

记住Python中的禅的最后位(不import this在解释器的提示,看到这一切):

Namespaces are one honking great idea -- let's do more of those!

导入整个模块(而不是从内它的点点滴滴)保留其作为一个命名空间完整,并请合格(点)名称指的是进口的模块里面的东西。 这是一个鸣喇叭伟大的想法:做更多的是 - )!



Answer 3:

是的,你只需要正确地访问它(和不使用进口*,它的邪恶)

c.py:

import a
print a.v1 # prints 1
a.v1 = 0
print a.v1 # prints 0


文章来源: Python imports: Will changing a variable in “child” change variable in “parent”/other children?
标签: python import