【问题标题】:What attributes does python import from a module?python从模块中导入哪些属性?
【发布时间】: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']

我的问题是

  • ab 仅在 temp9 范围内是全局的,而不是跨模块(如上面的答案所述),那么它是如何导出的?

  • 为什么t9inner()t9outer() 包围却没有被导入,而t9outer() 被导入了?

【问题讨论】:

  • a,b 实际上在temp9 的范围内是全局的。如果您尝试在主模块中访问它们 - 您将收到 NameError。但是,您可以通过temp9.atemp9.b 访问它们。并且t9inner 没有在模块的目录中列出,因为它在t9outer 的范围内。您可以通过dir(temp9.t9outer) 进行检查
  • t9inner 不存在根本,直到您实际调用 t9outer,即使那样,该名称也仅在范围内函数体。您可以将def 语句视为增强的赋值语句。

标签: python


【解决方案1】:

这两个问题的答案都是一样的。在模块级别定义的所有内容都被导入;未在模块级别定义的任何内容都不会被导入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多