是模块哈希表吗?

时间:2017-10-31 14:51:46

标签: python python-2.7 python-3.x

offsetWidth

上面的表达式是将整个代码复制到工作模块中,还是只知道它的名称(或其路径)?

如果它将整个代码复制到工作库中,那么为什么我们必须使用import module_name 类型的系统来处理该模块?

如果它没有复制任何代码,那么在修改module_name.function后,为什么它仍然有效?

1 个答案:

答案 0 :(得分:1)

模块就像Python中的其他所有对象一样。当您编写import module_name时,Python会在其自己的命名空间中执行模块的内容,并将该命名空间/对象存储在sys.modules中。在运行导入的模块中,该命名空间/对象绑定到模块的名称。您询问的简单导入语句大致相当于module_name = __import__('module_name')

在评论中提到的Treyten Carey,您也可以写from module_name import *。从执行期间的那一点开始,module_name中的所有公共名称都可以在调用模块中免费使用,而无需引用它们来自的命名空间。如果您熟悉其他语言,您可能会认为这与C#中的using或C中的include类似。但是,它并不完全相同。

如果您不希望每次想要访问模块的命名空间时都要从中访问某些内容,那么您希望编写在其他Python程序员中最受欢迎的Pythonic代码,我建议您在与口译员的互动会话期间import this?您将看到“蒂姆·彼得斯的Python的禅宗”,人们可能会争论支持命名空间的概念:

  • 明确胜于隐性。
  • 可读性很重要。
  • 面对歧义,拒绝猜测的诱惑。
  • 命名空间是一个很好的主意 - 让我们做更多的事情!