让我们让a.py是:
def foo():
global spam
spam = 42
return 'this'
在控制台上,如果简单地说import a
,对我来说很有意义:
>>> import a
>>> a.foo()
'this'
>>> a.spam
42
但是,如果我做的不太受欢迎,并且...
>>> from a import *
>>> foo()
'this'
>>> spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> a.spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
from module import *
从名称空间的角度来看,我已经读过关于人们为什么不喜欢“ ”的观点,但是我对此行为一无所获,坦率地说,我发现这是我偶然遇到的问题。
当您询问时,a.spam
会在模块中进行名称空间搜索a
并spam
找到。但是,当您只要求spam
:
>>> from a import * # imported foo, spam doesn't exist yet
>>> foo()
spam
是在命名空间a中创建的(尽管您不能通过这种导入方式来访问它),但是不在当前模块中创建。似乎没有人答应过我们要向已通过via导入的a
所有名称空间模块添加新添加的globals 。这将需要将导入链接存储在解释器内部,并且如果一个始终大量导入的模块始终在执行此类操作,则可能会降低性能。a
*
想象一下您spam
在调用之前已经在主模块中定义了foo()
。那将是彻头彻尾的名字冲突。
就像说明一样,您可以from a import *
获取模块的最新更新a
:
from a import *
print(foo())
from a import *
print(spam)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句