【发布时间】:2018-02-26 05:51:12
【问题描述】:
我检查了一些答案,例如this,但我还有另一个问题是关于哪些属性是从 python 中的模块导入的。
例如,我有一个模块temp9.py:
a=10
b=20
print('a={0}, b={1}'.format(a,b))
def t9outer():
print('in imported module')
def t9inner():
print('inner function')
然后我像这样导入这个模块:import temp9。如果我使用此命令获取导入文件的属性:
list(filter(lambda x: not x.startswith('__'),dir(temp9)))
我得到这个输出:
['a', 'b', 't9outer']
我的问题是
a和b仅在temp9范围内是全局的,而不是跨模块(如上面的答案所述),那么它是如何导出的?为什么
t9inner()被t9outer()包围却没有被导入,而t9outer()被导入了?
【问题讨论】:
-
a,b实际上在temp9的范围内是全局的。如果您尝试在主模块中访问它们 - 您将收到 NameError。但是,您可以通过temp9.a或temp9.b访问它们。并且t9inner没有在模块的目录中列出,因为它在t9outer的范围内。您可以通过dir(temp9.t9outer)进行检查 -
t9inner不存在根本,直到您实际调用t9outer,即使那样,该名称也仅在范围内函数体。您可以将def语句视为增强的赋值语句。
标签: python